You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 11:28:11