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

Python递归求和函数中print语句的输出逻辑解析求助

递归求和函数执行流程解析

你的核心问题在于:代码里计算完result后,额外调用了一次recursive_sum(num-1)并打印,这导致递归调用次数翻倍,输出的就是这些额外递归调用的返回值。下面一步步拆解recursive_sum(3)的完整执行过程:


执行步骤拆解

  1. 调用recursive_sum(3):
    • num≠0,先执行result = 3 + recursive_sum(2),进入recursive_sum(2)的调用。
  2. 调用recursive_sum(2):
    • num≠0,执行result = 2 + recursive_sum(1),进入recursive_sum(1)的调用。
  3. 调用recursive_sum(1):
    • num≠0,执行result = 1 + recursive_sum(0),进入recursive_sum(0)的调用。
  4. 调用recursive_sum(0):
    • 触发num==0的条件,直接返回0。
  5. 回到recursive_sum(1):
    • 计算result = 1 + 0 = 1。
    • 执行print(recursive_sum(0), end=" "):再次调用recursive_sum(0),返回0,所以打印0。
    • 最终返回result=1。
  6. 回到recursive_sum(2):
    • 计算result = 2 + 1 = 3。
    • 执行print(recursive_sum(1), end=" "):这里会完整调用一次recursive_sum(1):
      • 进入recursive_sum(1),计算result=1+recursive_sum(0)=1,然后执行print(recursive_sum(0), end=" ")打印0,最后返回1。
      • 所以这次print会输出1。
    • 此时已打印内容:0 0 1。
    • 返回result=3。
  7. 回到recursive_sum(3):
    • 计算result = 3 + 3 = 6。
    • 执行print(recursive_sum(2), end=" "):这里会完整调用一次recursive_sum(2):
      • 进入recursive_sum(2),先调用recursive_sum(1):该调用会打印0并返回1,所以recursive_sum(2)的result=2+1=3。
      • 接着recursive_sum(2)执行print(recursive_sum(1), end=" "):这个recursive_sum(1)调用会打印0并返回1,所以这里打印1。
      • 最终recursive_sum(2)返回3,所以这次print输出3。
    • 此时总打印内容就是:0 0 1 0 0 1 3 。
    • 返回result=6(这个返回值你没打印,所以看不到)。

优化建议:避免重复递归调用

如果想打印递归过程中的中间值,不要重复调用递归函数(会额外消耗性能且逻辑混乱),直接打印已计算的变量即可。比如修改后的代码:

def recursive_sum(num):
    if num == 0:
        print(0, end=" ")
        return 0
    result = num + recursive_sum(num - 1)
    print(num, end=" ")
    return result

执行recursive_sum(3)会输出0 1 2 3 ,清晰展示递归从底层到上层的执行过程。

内容的提问来源于stack exchange,提问作者akanksha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:20:16