不讲太多大家已经懂的,只讲大家不懂的地方

public class DiGui {

	public static void main(String[] args) {
		DiGui test = new DiGui();
		System.out.println(test.getSum(5));
	}
	public int getSum(int n) {
	
		if(n==1) { //#1
			return 1; //#2
		}else {
			return n + getSum(n-1);//#3
		}
	}
}

结果为:15 

以上为一个递归代码片段,大家都知道 #3位置  getSum ( 5 - 1)开始,直到返回1结束,迷惑就迷惑在返回1之后程序做了什么对吗?

其实是这样的:

#3 在执行时并未执行完毕,而是等待下一步。

第一步:比如getSum ( 5 - 1) 在等getSum ( 4 - 1) getSum ( 4 - 1) 又在等getSum ( 3 - 1)一直到返回1结束。

第二步:等到 #2位置 返回1后说明满足递归结束条件,这个时候 getSum (n-1) 已经等到最后一个,就是n ==1的时候然后返回一个 1  这会儿需要执行上面第一步还没有执行完毕的程序了,这个时候就开始往回算

getSum(1): return 1 + getSum(1-1)  // 这段是结束的 1+0 = 1

从getSum(2)开始我们要注意了。我们不能在关注n-1 这部分了。我们已经在第一步的时候算了,我们要开始执行 "和"

getSum(2):return 2 + getSum(2-1)  // 2+1 =3 , 这个2+1的 1 其实是getSum(1)和的1 而不是2-1的1
getSum(3):return 3 + getSum(3-1)  // 3 + 3=6到了这步就很明显了。我们只关注getSum(2)的和
getSum(4):return 4 + getSum(4-1) // 4 + 6 =10
getSum(5):return 5 + getSum(5-1)

 配合这张图大家看下吧: 

java递归JSONObject java递归原理_开发语言

 到此,我想大家应该都明白是怎么回事了。没有理清的原因就是大家忘记了 "和",一直关注于n-1

懂了的小伙伴麻烦给个赞,谢谢。