递归函数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
实际输出的逻辑拆解
原函数是累加求和的递归逻辑,执行过程如下:
- 调用
tri_recursion(3),因3>0,先触发tri_recursion(2),此时3 + ...的计算暂停 - 调用
tri_recursion(2),因2>0,触发tri_recursion(1),2 + ...计算暂停 - 调用
tri_recursion(1),因1>0,触发tri_recursion(0),1 + ...计算暂停 - 调用
tri_recursion(0),进入else分支,返回0 - 回到
tri_recursion(1),计算1 + 0 = 1,打印1,返回1 - 回到
tri_recursion(2),计算2 + 1 = 3,打印3,返回3 - 回到
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
相关产品推荐
相关产品推荐

