java递归

Posted 张宗强1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java递归相关的知识,希望对你有一定的参考价值。

一  什么是递归?

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

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递归的主要内容,如果未能解决你的问题,请参考以下文章

Java基础入门五)之方法以及递归算法

Java 基础语法方法的使用

java基础3-重载+命令行传参+递归+数组+排序

JavaScript - 代码片段,Snippets,Gist

CSP核心代码片段记录

executePendingTransactions 的递归入口