递归的简单了解

递归

递归:指在当前方法内调用自己的这种现象
分类
直接递归:方法自身直接调用自己
间接递归:a方法调用b方法,b方法调用a方法。
注意事项
递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出
在递归中虽然有限定条件,但是递归次数不能太多,否则会发生栈内存溢出
构造方法禁止递归
递归的使用前提
当调用方法时,方法主体不变,每次调用方法的参数不同,可以使用递归

public class Demo01Recursion {
    public static void main(String[] args) {
//        a(1);
        b();
    }
    //Exception in thread "main" java.lang.StackOverflowError
    private static void b() {
        b();
    }

    //在递归中虽然有限定条件,但是递归次数不能太多,否则会发生栈内存溢出
    //11268  Exception in thread "main" java.lang.StackOverflowError
    private static void a(int i) {
        System.out.println(i);
        if (i==20000){
            return;
        }
        a(++i);
    }
}

练习

使用递归计算1-n的和。

public class Demo02RecursionSum {
    public static void main(String[] args) {
//        int s = sum(3);
//        System.out.println(s);
        f(3);
    }
    /*
    定义一个方法,使用递归计算1-n之间的和
    1+2+3+4+...+n
    已知:
        最大值:n
        最小值:1
    使用递归必须明确:
        1.递归的结束条件
            获取到1的时候结束
        2.递归的目的
            获取下一个被加的数字n-1
    */
    public static int sum(int n){
        if(n==1){
            return 1;
        }
        return n + sum(n-1);
    }
    public static void f(int n){
        int su = 0;
        for (int i = 0; i <= n; i++) {
            su+=i;
        }
        System.out.println(su);
    }
}

使用递归计算阶乘:n!=n*(n-1)*…21

public class Demo03Recursion {
    public static void main(String[] args) {
        int d = dd(5);
        System.out.println(d);
    }
    /*
    定义方法使用递归计算阶乘
    递归结束的条件
        获取到1时结束
    递归的目的
        获取下一个被乘数字(n-1)
    * */
    private static int dd(int n) {
        if (n==1){
            return 1;
        }
        return n * dd(n-1);
    }
}

定义一个方法,传递参数File类型的目录
方法对目录进行遍历

public class Demo04Recursion {
    public static void main(String[] args) {
        File f1 = new File("D:\\IdeaProjects\\basic-code\\day06abstract\\src");
        getFile(f1);
    }
    public static void getFile(File dir){
        File[] files = dir.listFiles();
        for (File file : files) {
            //对遍历到的File对象file进行判断,判断是否是文件夹
            if (file.isDirectory()){
                //是文件夹,就继续遍历
                //直接调用getFile方法即可,递归
                getFile(file);
            }else {
                //file是文件,就直接打印
                System.out.println(file);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值