递归概念&分类&注意事项和练习_使用递归计算1-n之间的和

递归概念&分类&注意事项

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

 

>递归的分类:

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

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

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

>注意事项:

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

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

  构造方法, 禁止递归

递归的使用前提:

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


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

 

栈内存溢出异常

 

 

 

 

 

a方法会在栈内存中一直调用a方法,就会导致栈内存中有无数多个a方法

方法太多了,超出栈内存的大小,就会导致内存溢出的错误

注意:

  当一个方法调用其他方法的时候,被调用的方法没有执行完毕,当前方法会一直等待调用的方法

  执行完毕,才会继续执行

 

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

 

 

 

 构造方法, 禁止递归

 

 

 

 

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

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

定义一个方法,使用递归计算1-n之间的和

1+2+3+...+n

n+(n-1)+(n-2)+...+1

已知:

  最大值:n

  最小值:1

使用递归必须明确:

  1.递归的结束条件(获取到1的时候结束)

  2.递归的目的(获取下一个被加的数字(n-1))

    public static void main(String[] args) {
        int s = sum(100);
        System.out.println(s);
    }
    private static int sum(int i) {
        if (i==1){
            return 1;
        }
        return i+sum(i-1);
    }

 

 

 

注意:

  使用递归求和,main方法调用sum方法,sum方法会一直调用sum方法

  导致在内存中有多个sum方法(频繁的创建方法,调用方法,销毁方法)效率低下

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

 

posted @ 2022-07-12 11:03  魔光领域  阅读(75)  评论(0编辑  收藏  举报