使用递归计算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循环即可