递归的分类
直接递归: 方法自己调用自己;
间接递归: A方法调用B方法,B方法调用C方法,C方法调用A方法;
注意事项
- 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出;
- 递归次数不能太对,否则也会栈内存溢出;
- 构造方法,禁止递归;
递归的使用前提
当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归;
简单案例
用递归的方式求1-n的和
public class Solution {
/*
1+2+3+...+n
n+(n-1)+(n-2)+(n-3)+...+1
已知最大值: n
已知最小值: 1
使用递归必须明确:
1.递归的结束条件;
获取到1的时候结束;
2.递归的目的;
获取下一个被加的数字(n-1)
*/
public static void main(String[] args) {
System.out.println(sumN(10));
}
private static int sumN(int n) {
if (n==1){
return 1;
}
return n+sumN(n-1);
}
}
递归打印多级目录
public class Solution {
public static void getAllFiles(File dir){
//打印每次被遍历的文件夹
System.out.println(dir);
//获取这个目录的数组
File[] files = dir.listFiles();
//遍历数组
for (File file : files) {
//判断遍历出来的是否是文件夹
if (file.isDirectory()){
//是文件夹,递归继续遍历
getAllFiles(file);
}else {
//不是文件夹,打印文件路径
System.out.println(file);
}
}
}
public static void main(String[] args) {
File dir = new File("D:\\demo");
getAllFiles(dir);
}
}