java 递归题目_Java 递归 常见24道题目 总结

本文详细介绍了24道使用Java递归解决的编程题目,涵盖台阶走法、文件操作、查找、计算、兔子问题、素数判断、水仙花数等多个方面,通过实例代码展示了递归在各种场景的应用。
摘要由CSDN通过智能技术生成

1.N个台阶的走法递归【这里设为10个台阶】

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** N个台阶的走法递归

*

* 有个楼梯,台阶有10个,每次可以跳上1阶 或者 2阶 ,那么台阶的走法一共有多少种*/@Testpublic voidt() {

System.out.println(f(10));

}//斐波那契数列变形,求N个台阶的走法,递归方法

public int f(intn) {if (n <= 2) {returnn;

}return f(n - 1) + f(n - 2);

}

View Code

402532cff8f22e5fff5beeca37042f41.png

2.文件删除递归

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 文件删除递归

*

* 1:检测文件夹是否存在,不存在则退出

* 2:获取该文件夹目录【获取文件数组】,遍历文件数组

* 3:判断是文件则删除,不是则回调 2

* 4.文件删除完后,将该文件夹删除*/@Testpublic voidt2() {this.delete(file);

}//封装根目录

static File file = new File("C:/Users/cen/Desktop/ww");public voiddelete(File f) {if (!f.exists()) {

System.out.println("该文件夹不存在");return;

}//获取该文件夹的目录文件数组

File[] files =f.listFiles();//遍历

for(File mf : files) {//如果是文件夹

if(mf.isDirectory()) {//递归

delete(mf);

}//如果是文件

else if(mf.isFile()) {//删除文件,方法.delete() 删除成功返回true ,失败为false

System.out.println("文件" + mf.getName() + "被删除:" +mf.delete());

}

}

System.out.println("最后操作完毕,已经是个空文件夹=" + f.getName() + "=啦,现在删除该空文件夹:" +f.delete());

}

View Code

6244a1cdfd9f9ba9cbc5894e05d59430.png

3.文件查询递归

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 文件查询递归

*

* 1:检测文件夹是否存在,不存在则退出

* 2:获取该文件夹目录【获取文件数组】,遍历文件数组

* 3:判断是文件夹则回调 2 ,如果是是文件且文件名后缀是 .java 则打印绝对路径*/@Testpublic voidt3() {this.find(file2);

}//封装根目录

static File file2 = new File("C:/Users/cen/Desktop/ww");public voidfind(File f) {if (!f.exists()) {

System.out.println("该文件夹不存在");return;

}//获取该文件夹的目录文件数组

File[] files =f.listFiles();//遍历

if (files != null) {for(File mf : files) {//如果是文件夹

if(mf.isDirectory()) {//递归

find(mf);

}//如果是文件 且文件名后缀是 .java 则打印觉得路径

else if (mf.isFile() && mf.getName().endsWith(".java")) {//删除文件,方法.delete() 删除成功返回true ,失败为false

System.out.println("文件" + mf.getName() + "绝对路径:" +mf.getAbsolutePath());

}

}

}

}

View Code

5d957d98646295fc9e0d66e4792469f0.png

4.使用递归方式计算 随机数 [1,10]的乘阶结果并打印过程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 使用递归方式计算 随机数 [1,10]的乘阶结果并打印过程*/@Testpublic voidt4() {//(数据类型)(最小值+Math.random()*(最大值-最小值+1))

int i = (int) (1 + Math.random() * (10 - 1 + 1));

System.out.println(i+ "的乘阶是:" + this.mo(i));

StringBuilder s= newStringBuilder();for (intn : list) {

s.append(n).append("*");

}int len =s.length();//去掉末尾的 *号//substrings是要包含末尾索引的字符的

String str = s.substring(0, len - 1);

System.out.println("乘阶过程是" +str);

}//记录数字

List list = new ArrayList<>();public int mo(intn) {//记录数字

list.add(n);if (n < 2) {//n为1

returnn;

}//递归

return n * mo(n - 1);

}

View Code

39bb09b0498bd2c3c6002994ccb7a4af.png

5.有一对兔子,从出生后第三个月起每个月都生一对兔子 ,小兔子长到第三个月后每

个月又生一对兔子,假如兔子都不死 ,问每个月的兔子总数为多少?

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

/*** 题目:有一对兔子,从出生后第三个月起每个月都生一对兔子 ,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死 ,问每个月的兔子总数为多少?

*

* 解析:使用斐波拉契数列计算 : 每一项都是前两项之和,一般使用递归方法计算

*

* 兔子数列应该是 1,1,2,3,5,8,13,21,34 【注意:这里的单位是对 ,那么兔子数需要 * 2】*/@Test//public void t5() {

public static voidmain(String[] args) {//获取月份数

int n =getMonth();

System.out.println("当前输入月份是:" +n);//兔子对数

int xx =tutu(n);

System.out.println("当前兔子对数是:" +xx);

System.out.println("当前共有" + 2 * xx + "只兔子");

}//获取键盘数字递归

public static intgetMonth() {

System.out.println("请输入月份【正整数】:");//从键盘接收数据

Scanner scanner = newScanner(System.in);//判断是否有输入值

if(scanner.hasNext()) {//接收数值

String m =scanner.next();try{//字符串转整数//Integer x = Integer.valueOf(m);

int x =Integer.parseInt(m);if (x > 0) {returnx;

}returngetMonth();

}catch(Exception e) {returngetMonth();

}

}returngetMonth();

}//斐波拉契数列递归

public static int tutu(intn) {//前两个月不生兔子,还是一对

if (n < 3) {return 1;

}else{return tutu(n - 1) + tutu(n - 2);

}

}

View Code

60fa54b88f33e707968d8fc995d48469.png

6.判断101-200之间有多少个素数,并输出所有素数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值