码迷,mamicode.com
首页 > 编程语言 > 详细

java递归

时间:2019-01-04 14:40:04      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:ret   栈内存   big   java   rgs   lis   目录   循环   tip   

一  什么是递归?

递归,就是自己调用自己,但是需要给一个出口,不能无限死循环

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);
        }
    }

 

 

java递归

标签:ret   栈内存   big   java   rgs   lis   目录   循环   tip   

原文地址:https://www.cnblogs.com/zzq123/p/10219067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!