无法理解Python递归程序,请求解释tri_recursion代码执行逻辑
拆解这段Python递归代码的执行过程
嘿,我来帮你一步步理清楚这段递归代码到底是怎么跑的,递归刚开始确实容易绕晕,咱们慢慢来:
首先先把代码清晰列出来:
def tri_recursion(k): if(k > 0): result = k + tri_recursion(k -1) print(result) else: result = 0 return result tri_recursion(6)
核心概念:递归的"出口"和"回溯"
递归的关键是有终止条件(不然会无限调用自己直到内存溢出),这里的终止条件就是k <= 0的时候返回0。然后递归会先一层层"深入"到终止条件,再一步步"回溯"计算结果。
详细执行步骤
咱们从调用tri_recursion(6)开始,一步步跟踪:
1. 逐层深入到终止条件
- 调用
tri_recursion(6):k=6>0,需要计算6 + tri_recursion(5),但tri_recursion(5)还没执行完,所以当前函数暂停,先去执行tri_recursion(5) - 调用
tri_recursion(5):k=5>0,计算5 + tri_recursion(4),暂停,执行tri_recursion(4) - 调用
tri_recursion(4):k=4>0,计算4 + tri_recursion(3),暂停,执行tri_recursion(3) - 调用
tri_recursion(3):k=3>0,计算3 + tri_recursion(2),暂停,执行tri_recursion(2) - 调用
tri_recursion(2):k=2>0,计算2 + tri_recursion(1),暂停,执行tri_recursion(1) - 调用
tri_recursion(1):k=1>0,计算1 + tri_recursion(0),暂停,执行tri_recursion(0) - 调用
tri_recursion(0):k=0不满足k>0,所以result=0,返回0给上一层的tri_recursion(1)
2. 回溯计算并打印结果
现在开始从最内层往回计算,每一层拿到返回值后完成自己的计算,然后打印结果:
- 回到
tri_recursion(1):result = 1 + 0 = 1,打印1,返回1给tri_recursion(2) - 回到
tri_recursion(2):result = 2 + 1 = 3,打印3,返回3给tri_recursion(3) - 回到
tri_recursion(3):result = 3 + 3 = 6,打印6,返回6给tri_recursion(4) - 回到
tri_recursion(4):result = 4 + 6 = 10,打印10,返回10给tri_recursion(5) - 回到
tri_recursion(5):result = 5 + 10 = 15,打印15,返回15给tri_recursion(6) - 回到
tri_recursion(6):result = 6 + 15 = 21,打印21,返回21
所以最终控制台的输出顺序是:
1 3 6 10 15 21
总结
这段代码本质上是用递归的方式计算1到k的累加和,公式就是k*(k+1)/2,比如k=6时,6*7/2=21,和咱们计算的结果完全一致。
内容的提问来源于stack exchange,提问作者Prajwal Karki
相关产品推荐
相关产品推荐

