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

递归函数tri_recursion输出疑问:为何最终结果是6而非预期的5?

递归函数输出不符的原因解释

原函数代码

def tri_recursion(k):
  if(k > 0):
    result = k + tri_recursion(k - 1)
    print(result)
  else:
    result = 0
  return result

print("Recursion Example Results")
tri_recursion(3)

实际输出

Recursion Example Results
1
3
6

预期输出

Recursion Example Results
1
3
5


实际输出的逻辑拆解

原函数是累加求和的递归逻辑,执行过程如下:

  1. 调用tri_recursion(3),因3>0,先触发tri_recursion(2),此时3 + ...的计算暂停
  2. 调用tri_recursion(2),因2>0,触发tri_recursion(1),2 + ...计算暂停
  3. 调用tri_recursion(1),因1>0,触发tri_recursion(0),1 + ...计算暂停
  4. 调用tri_recursion(0),进入else分支,返回0
  5. 回到tri_recursion(1),计算1 + 0 = 1,打印1,返回1
  6. 回到tri_recursion(2),计算2 + 1 = 3,打印3,返回3
  7. 回到tri_recursion(3),计算3 + 3 = 6,打印6,返回6

每一步打印的是「从1到当前k的累加和」,所以输出1、3、6。

如何得到预期的1、3、5

如果要输出1、3、5(即1到3的奇数序列),需要修改递归逻辑,调整计算规则和打印时机:

def tri_recursion(k):
    if k > 0:
        tri_recursion(k - 1)
        # 生成对应奇数:k=1→1,k=2→3,k=3→5
        print(2 * k - 1)
    else:
        return

print("Recursion Example Results")
tri_recursion(3)

这段代码会先递归到最底层的k=1,再依次返回打印对应的奇数,最终输出1、3、5。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:16:08