递归
一. 什么是递归:自己调用自己;
递归需要终止条件(出口),与死循环的区别;
二. 递归两个条件
a> 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
b> 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)
三. 递归的三要素;
a> 一定有一种可以退出程序的情况;
b>总是在尝试将一个问题化简到更小的规模
c>父问题与子问题不能有重叠的部分
四:代码示例:
1:递归求和
public class DiGuiDemo {
public static void main(String[] args) {
//计算1-----num的和
int num = 5;
//d调用求和的方法
int sum = getsum(num);
System.out.println(sum);
}
private static int getsum(int *num*) {
/**
* 当num 为1的时候,方法返回1
* 相当于方法的出口,因为num总会有为1的情况
*/
if (num == 1) {
return 1;
}
/**
* 当num不为1的情况下,返回num+(num-1)的累和。
* 自己调用自己递归实现
* */
return num+getsum(*num-1*);
/*
* 使用三元表达式替代if else 判断
return num == 1 ? 1 :num+getsum(num-1);*/
}
}
输出 15
2:递归打印文件
public class DiGuiFile {
public static void main(String[] args) {
// 创建File对象
File dir = new File("D:\\aba");
// 调用打印目录方法
printDir(dir);
}
public static void printDir(File dir) {
// 获取子文件和目录
File[] files = dir.listFiles();
// 循环打印
for (File file : files) {
if (file.isFile()) {
// 是文件,判断文件名并输出文件绝对路径
if (file.getName().endsWith(".java")) {
System.out.println("文件名:" + file.getAbsolutePath());
}
} else {
// 是目录,继续遍历,形成递归
printDir(file);
}
}
}
}