Python递归函数tri_recursion逻辑解析及输出差异问题求助
解析Python递归函数
tri_recursion的执行逻辑与输出差异 我来帮你拆解这个递归函数的执行逻辑,你之所以会有预期和实际输出的差异,核心是没搞清楚递归先递后归的执行顺序——递归不是一下子算出最终结果,而是先逐层深入到终止条件,再反向回溯计算并执行打印操作。
先明确函数的核心逻辑
这个函数本质上是计算从1到k的累加和(也就是三角形数),但它的print(result)语句是在回溯阶段执行的,这是你没预想到输出的关键。
分步模拟tri_recursion(6)的执行过程
我们把整个过程分成「递(深入)」和「归(回溯)」两个阶段:
1. 递的阶段:逐层深入到终止条件
调用tri_recursion(6)后,函数会不断调用自身,直到触发k<=0的终止条件:
- k=6 > 0 → 暂停当前计算,先调用
tri_recursion(5) - k=5 > 0 → 暂停当前计算,先调用
tri_recursion(4) - k=4 > 0 → 暂停当前计算,先调用
tri_recursion(3) - k=3 > 0 → 暂停当前计算,先调用
tri_recursion(2) - k=2 > 0 → 暂停当前计算,先调用
tri_recursion(1) - k=1 > 0 → 暂停当前计算,先调用
tri_recursion(0) - k=0 → 触发else分支,
result=0,返回0给上一层(k=1的调用)
2. 归的阶段:反向回溯计算并打印
当到达终止条件后,函数开始反向回溯,每一步都会完成之前暂停的计算,然后执行print(result):
- 回到k=1的调用:
result = 1 + 0 = 1→ 执行print(1)→ 返回1给k=2的调用 - 回到k=2的调用:
result = 2 + 1 = 3→ 执行print(3)→ 返回3给k=3的调用 - 回到k=3的调用:
result = 3 + 3 = 6→ 执行print(6)→ 返回6给k=4的调用 - 回到k=4的调用:
result = 4 + 6 = 10→ 执行print(10)→ 返回10给k=5的调用 - 回到k=5的调用:
result = 5 + 10 = 15→ 执行print(15)→ 返回15给k=6的调用 - 回到k=6的调用:
result = 6 + 15 = 21→ 执行print(21)→ 返回21(这个返回值没有被主程序打印,因为我们只调用了函数,没输出它的返回值)
为什么你的预期和实际输出不同?
你之前以为只会得到Recursion Example Results这行输出,是因为误以为递归只会在最后返回结果,没有意识到:
print(result)语句不是在「递」的阶段执行的,而是在「归」的每一步,子调用返回后才会触发- 每一层递归都会在完成计算后执行一次print,所以会连续输出6行数字
内容的提问来源于stack exchange,提问作者PONDICHERRY 360
相关产品推荐
相关产品推荐

