31、递归

本文详细介绍了Java中的递归与方法嵌套,通过四个实例——递归求解斐波那契数列、打印九九乘法表、猴子吃桃问题和删除文件夹下的资源,阐述了递归的基本概念和实现条件。强调了递归出口的重要性,以及避免内存溢出和栈溢出的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义

在 Java 中,就是在方法定义中调用本方法自身的现象
但是 Math.max(Math.max(a,c),b); 这不叫递归,则叫方法嵌套

注意点(实现递归的三个必须条件)

1、递归一定要有出口(举例中的 n),否则死循环:重点中的重点
2、递归次数不要太多,否则容易内存溢出
3、方法定义中调方法本身

举例

1、递归

public static void main(String[] args) {
	System.out.println(recursion(12));
}
 
public static int recursion(int month) {
// 倒序
// 12月时是10月和11月之和
// recursion(12) = recursion(10)+recursion(11)
// recursion(11) = recursion(10)+recursion(9)
if (month == 1 || month == 2) {
	return 1;// 太难了,把钱还我吧
} else {
	return recursion(month - 1) + recursion(month - 2);
}

2、九九乘法表

public static void main(String[] args) {
	print99(9);
}
	
public static void print99(int i) {
	if (i==1) {
		System.out.println("1=1*1");
	} else {
		print99(i-1);
		for (int j = 1; j <=i; j++) {
			System.out.print(i*j+"="+j+"*"+i+"\t");
		}
		System.out.println();
	}
}

3、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃了前一天剩下的一半零一个。到第10天,只剩下一个桃子了。试求第一天共桃子?

public static void main(String[] args) {
	System.out.println(eatPeach(10));
}

public static int eatPeach(int i) {
	if (i==1) {
		return 1;
	} else {
		return 2*eatPeach(i-1)+2;
	}
}

4、删除某个文件夹下的所有文件夹和文件

public static void main(String[] args) {
	File file = new File("H:\\1223HomeWork");
	delResources(file);
}

public static void delResources(File file) {
	File[] files = file.listFiles();
	if (files != null) {
		for (File file2 : files) {
			if (file2.isDirectory()) { //判断是否为文件夹
				delResources(file2);   //是文件夹就迭代
			} else {				//不是文件夹就删除
				file2.delete();
			}
			//删除空文件夹
			file2.delete();
		}
	}else {
		System.out.println("该目录: "+file.getAbsolutePath()+"为空");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值