当前位置 > it书童 > java > 正文

Java 实现递归

java it书童 2020-08-11 22:39:57 0赞 0踩 81阅读 0评论

递归:指在当前方法内调用自己的这种现象

递归分为两种,直接递归和间接递归

  • 直接递归称为方法自身调用自己

  • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法

注意事项:

  • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出

  • 在递归中虽然有限定条件,但是递归次数不能太多。否则也会发生栈内存溢出

  • 构造方法,禁止递归

递归累加求和

计算1 ~ n的和

分析:num的累和 = num + (num-1)的累和,所以可以把累和的操作定义成一个方法,递归调用。

public class Test {
    public static void main(String[] args) {
        int num = 5;
        int sum = getSum(num);
        System.out.println(sum);
    }

    public static int getSum(int num) {
        // 递归出口
        if (num == 1) {
            return 1;
        }
        return num + getSum(num - 1);
    }
}

代码执行图解

递归一定要有条件限定,保证递归能够停止下来,次数不要太多,否则会发生栈内存溢出。

递归打印多级目录

分析:多级目录的打印,就是当目录的嵌套。遍历之前,无从知道到底有多少级目录,所以我们还是要使用递归实现。

import java.io.File;

public class Test {
    public static void main(String[] args) {
        File dir = new File("/tmp");
        printDir(dir);
    }
    
    public static void printDir(File dir) {
        // 获取子文件和子目录
        File[] files = dir.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    // 文件:输出绝对路径
                    System.out.println("文件:" + file.getAbsolutePath());
                } else {
                    // 目录,输出目录绝对路径,递归调用
                    System.out.println("目录:" + file.getAbsolutePath());
                    printDir(file);
                }
            }
        }
    }
}
转载须注明出处:https://www.itshutong.com/articles/594/java-implements-recursion
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
发表评论
我有句话,不知当讲不当讲?
要讲之前请先 登录