Java 递归的概述和使用(递归累和、递归求阶乘、递归文件搜索)

本文介绍了Java中递归的概念,通过实例展示了递归求累加和、阶乘的方法,并讲解了如何使用递归进行文件搜索。在递归过程中强调了要有明确的出口以避免栈内存溢出异常。同时,文章提供了递归实现的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

        生活中来说:

                父辈种地 -- 挣钱 -- 供养孩子 -- 孩子长大 -- 孩子种地 -- 孩子挣钱 -- 供养孩子 -- 孙子长大 -- 孙子种地

        程序中来说:

                是指在当前方法中调用自己  的这种现象

        注意事项:

                1.递归一定要有出口,否则会报 栈内存溢出 异常

                2.递归出口完了,还是会报

        代码演示:

public class Test {
    public static void main (String[] args) {
        // 让该方法调用100次
        method();
    }

    // 定义一个全局count
    static int count = 0;

    // 定义一个方法
    public static void method(){
        count++;
        while (count == 100){
            return;
        }
        System.out.println("method方法执行了..." + count + "次");
        method();
        // 方法结束的时候继续调用自己,再来一次执行,知道满足while循环,return;之后,就不会在执行以下代码,递归就结束了
    }
}
        
        输出结果:    
            method方法执行了...1次
            method方法执行了...2次
            method方法执行了...3次
            method方法执行了...4次
                ... ...
            method方法执行了...96次
            method方法执行了...97次
            method方法执行了...98次
            method方法执行了...99次

二、递归求累和

        递归:

                规律:为了清楚什么时候递归

                出口:为了结束递归

        需求:

                使用累加求和:计算1~n的值

                1的累加和 = 1
                2的累加和 = 1 + 2
                3的累加和 = 1 + 2 + 3
                n的累加和 = n + (n-1)

public class Test {
    public static void main (String[] args) {

        System.out.println(getNum(5));
    }

    public static int getNum(int num){
        if(num == 1){
            return 1;
        }
        return num + getNum(num - 1);
    }
}

        输出结果:
                15

三、递归求阶乘

        需求:使用递归计算 n 的结成
        n! = n * (n-1)
        1! = 1
        2! = 1 * 2
        3! = 1 * 2 * 3
        4! = 1 * 2 * 3 * 4

public class Test {
    public static void main (String[] args) {
        System.out.println(jiecheng(5));
    }
    public static int jiecheng(int num){
        if(num == 1){
            return 1;
        }
        return num * jiecheng(num - 1);
    }
}

        输出结果:
            120

四、递归文件搜索

        (关于File文件的详细用法,在上一篇博客https://blog.youkuaiyun.com/m0_60489526/article/details/119985472

         需求:输出 day12 src目录中的所有.Java文件的绝对路径

                (忽略我的项目文件路径,纯属为了学习记笔记用的方便,写项目不会这样😂)

public class Test {
    public static void main (String[] args) {

        File file = new File("D:\\myprojects\\javase0806\\day12_File类与递归&IO流&字符流&字节流\\src");

        findFile(file);
    }

    // 1.定义一个方法,用来获取一个目录中所有符合条件的文件(子文件,子子文件,子子子文件...)
    public static void findFile(File file){

        // 2.在方法中,获取该目录下的所有子子文件和子目录
        File[] files = file.listFiles();
        if(files != null){
            // 3.在方法中,循环遍历获取到的所有子文件和子目录
            for (File file1 : files) {
                // 4.在方法中,遍历的时候,需要判断遍历出来的文件还是目录
                if(file1.isFile() && file1.getName().endsWith(".java")){
                    // 5.如果是文件,就判断该文件是否以.java结尾,如果是,就获取其绝对路径,并打印输出
                    System.out.println(file1.getAbsolutePath());
                }
                // 6.如果是文件夹,就递归调用该方法
                if(file1.isDirectory()){
                    findFile(file1);
                }
            }
        }
    }
}

        输出结果:(另类的起名方式我已经 马赛克 了,不要学我😂)

        

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值