"
一 什么是递归?
递归,就是自己调用自己,但是需要给一个出口,不能无限死循环
public void method(){
System.out.println(“递归的演示”);
//在当前方法内调用自己
method();
}
递归又分直接递归和间接递归
直接递归就是在本方法中调用自己
间接递归就是A方法调用B方法,B方法调用C方法,然后C再调用A,这就是间接递归
举个例子:计算1-100之间的和
public class DiGuiDemo {
public static void main(String【】 args) {
//计算1~num的和,使用递归完成
int n = 5;
int sum = getSum(n);
//代码效果参考:https://v.youku.com/v_show/id_XNjM5NzY3NDYxNg==.html
System.out.println(sum);}
public static int getSum(int n) {
if(n == 1){
return 1;
}
return n + getSum(n-1);
}
}
举一反三:求1-100的阶乘
public static BigDecimal getSum(int n){
BigDecimal m=new BigDecimal(n);
if(n==1){
return new BigDecimal(1);
}
BigDecimal bigMul = m.multiply(getSum(n-1));
return bigMul;
}
因为数据太大,对于大数据的处理,只能用BigDecimal
需要注意的是:
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出。
在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出。
二 用 递归打印所有子目录中的文件路径
public static void main(String【】 args) {
File file=new File(""E:\java"");
getFile(file);
}
public static void getFile(File dir){
File【】 files=dir.listFiles(new MyFileter());
//代码效果参考:https://v.youku.com/v_show/id_XNjQwMDE0NzYxMg==.html
System.out.println(dir+""文件夹"");for(File f:files){
//如果该文件对象是文件夹则调用自己
if(f.isDirectory()){
getFile(f);
}
System.out.println(f);
}
}
"