Java递归计算1-100之间的的和 分析方法体的在栈内存中的压栈(入栈)和弹栈

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

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

已知:

最大值:n

最小值:1

计算:

1+2+3+...+(n-1)+n=?????

使用递归的明确条件

1、递归的结束条件

             获取到1的时候结束

2、递归的目的

            获取下一个被加的数字(n-1)

使用递归计算1-100的累加值代码:

package com.baidu;

public class SumDecursion {
    public static void main(String[] args) {
        System.out.println(sum(100));
    }
    public static int sum(int n){
        //获取到1的时候结束
        if (n==1){
            return 1;
        }

        //获取下一个被加的数字(n-1)
        int sum1 = n+sum(n-1);
        return sum1;

    }
}

递归计算数字累加的原理:

没有创建对象,没有new就没有堆内存

1、程序首先执行main方法,我们一直都在说main方法是程序的入口,此时main方法压栈执行,从栈顶进入栈底

2、main方法里调用了sum方法,sum方法此刻会压栈执行

3、sum方法里有if判断语句,100肯定不等于1,这个时候if语句不执行,只返回 100+sum(100-1)

4、在return语句执行的时候,又遇到一个sum方法此时参数为99(100-1),返回99+sum(99-1)

5、。。。。。。

6、在sum方法传参数为1的时候,此时if语句成立,程序走if语句,不走if语句外的return了,跳出了递归

 

弹栈

一旦main方法结束了,栈中所有的方法都会弹出

写完递归后发现为啥要写递归呢?

for循环就可以完成1-100的累加求和

注意:

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

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

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值