定义
在 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()+"为空");
}
}