我是否已正确理解递归原理?请帮我验证我的分析
递归代码分析纠正与原理梳理
先给你看这段代码实际运行的输出:
Recursion Results are 1 3 6
下面一步步拆解完整的执行流程,帮你理清正确的递归逻辑:
初始调用
rec(3)
3>0,执行r = 3 + rec(2),此时rec(2)还没跑完,程序先暂停rec(3)的计算,转而去执行rec(2)。调用
rec(2)
2>0,执行r = 2 + rec(1),同样暂停当前计算,调用rec(1)。调用
rec(1)
1>0,执行r = 1 + rec(0),暂停当前计算,调用rec(0)。触发终止条件:调用
rec(0)
0不满足a>0,进入else分支,r=0,并把0返回给上一层的rec(1)。回溯计算(递归的“归”阶段)
- 回到
rec(1):拿到rec(0)返回的0,算出r=1+0=1,打印1,再把1返回给rec(2)。 - 回到
rec(2):拿到rec(1)返回的1,算出r=2+1=3,打印3,再把3返回给rec(3)。 - 回到
rec(3):拿到rec(2)返回的3,算出r=3+3=6,打印6,最后把6作为整个rec(3)调用的返回值。
- 回到
再纠正你分析里的几个偏差:
- 你说“第一次调用结果为6”不对,初始调用
rec(3)不会直接得到结果,它得等所有下层递归完成后才会计算出最终值。 - 最终输出不是只打印1,而是按1、3、6的顺序输出,函数的返回值是6。
- 打印顺序的核心原因是递归先“递”到终止基准点,再“归”回来执行计算和打印:最内层的递归最先完成计算,所以先打印;最外层的最后完成,所以最后打印。
内容的提问来源于stack exchange,提问作者simmo
相关产品推荐
相关产品推荐

