一 什么是递归?
递归,就是自己调用自己,但是需要给一个出口,不能无限死循环
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); 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()); System.out.println(dir+"文件夹"); for(File f:files){ //如果该文件对象是文件夹则调用自己 if(f.isDirectory()){ getFile(f); } System.out.println(f); } }