递归的概念、分类、注意事项以及练习

递归

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

递归的分类:

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

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

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

注意事项:

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

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

  构造方法,禁止递归。

递归的使用前提:

  当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归

 

 

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

复制代码
    public static void main(String[] args){
        a();
    }

    /**
     * 递归一定要有条件限定,保证递归能够停止下来,否则会发生柱内存溢出。
     * Exception in thread "main" java.lang.StackOverflowError
     */
    private static void a() {
        System.out.println("a方法");
        a();
    }
复制代码

 

 

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

复制代码
    public static void main(String[] args){
        b(1);
    }

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

 

 

 

构造方法,禁止递归。

编译报错:构造方法是创建对象使用的,一直递归会导致内存中有无数多个对象,直接编译报错

 

 

 

 

 

练习—使用递归计算1-n之间的和

复制代码
    public static void main(String[] args){
        int sum = sum(3);
        System.out.println(sum);
    }

    /**
     * 定义一个方法,使用递归计算1-n之间的和
     * 1+2+3+...+n
     * n+(n-1)+(n-2)+...+1
     * 已知:
     *      最大值:n
     *      最小值:1
     * 使用递归必须明确:
     *      1、递归的结束条件
     *          获取到1的时候结束
     *      2、递归的目的
     *          获取下一个被加的数字(n-1)
     */
    private static int sum(int n) {
        if (n==1){
            return 1;
        }
        return n+sum(n-1);
    }
复制代码

 

 

注意:

  使用递归求和,main方法调用sum方法sum方法会一直调用sum方法
  导致在内存中有多个sum方法(频繁的创建方法调用方法销毁方满)效率低下

所以如果仅仅是计算1-n之问的和,不推荐使用递归使用for循环即可

 

posted @   xjw12345  阅读(560)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示