递归为何未停止?关于给定Python递归代码的执行逻辑疑问
递归代码执行逻辑解答
你的代码与输出
代码
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(6)
输出
1 3 6 10 15 21
疑问解答
1. 为何打印1后仍继续执行?
递归的执行是**先“递进去”,再“退回来”**的过程:
- 调用
tri_recursion(6)时,它会先依次调用tri_recursion(5)、tri_recursion(4)……直到tri_recursion(0)。这一阶段所有外层调用都卡在result = k + tri_recursion(k-1)这行,等着内层调用返回结果。 - 当
tri_recursion(0)返回0后,才进入“退回”阶段:先回到tri_recursion(1),算出result=1+0=1并打印;接着回到tri_recursion(2),算出result=2+1=3并打印;以此类推直到tri_recursion(6)完成计算和打印。
所以打印1只是“退回”阶段的第一步,后续还有多层递归未执行完,自然会继续运行。
2. 为何k=0时没打印,却输出了1?
这个1不是k=0的结果,是k=1那一层的计算值:
- k=0时进入else分支,仅返回0,确实不会触发打印。
- 但这个0会返回到上一层(k=1的调用),代入
result = 1 + tri_recursion(0)得到result=1+0=1,之后执行k=1那一层的print(result),所以你看到的1是k=1的计算结果。
内容的提问来源于stack exchange,提问作者Local man
相关产品推荐
相关产品推荐

