Python递归函数function2为何在数值到6后逐次递减至0?
递归函数执行流程解析
先看这段代码的运行结果:
test = [] def function2(n): test.append(n) if (n < 5): function2(n + 2) test.append(n) function2(0) print(test) # 输出: [0, 2, 4, 6, 6, 4, 2, 0]
你疑惑的“参数达到6后递减至0”,核心原因是递归调用遵循栈的“后进先出”规则,函数并不是只执行一次就结束,而是在递归调用完成后,会回到调用点继续执行后续代码。
我们一步步拆解执行过程:
- 调用
function2(0):先执行test.append(0)(此时test=[0]),因0<5成立,调用function2(2) - 进入
function2(2):执行test.append(2)(test=[0,2]),因2<5成立,调用function2(4) - 进入
function2(4):执行test.append(4)(test=[0,2,4]),因4<5成立,调用function2(6) - 进入
function2(6):执行test.append(6)(test=[0,2,4,6]),因6<5不成立,跳过递归调用;接着执行test.append(6)(test=[0,2,4,6,6]),函数执行完毕,回到上一层调用(function2(4)的递归位置) - 回到
function2(4):递归调用完成后,执行后续的test.append(4)(test=[0,2,4,6,6,4]),函数结束,回到function2(2)的递归位置 - 回到
function2(2):执行后续的test.append(2)(test=[0,2,4,6,6,4,2]),函数结束,回到function2(0)的递归位置 - 回到
function2(0):执行后续的test.append(0)(test=[0,2,4,6,6,4,2,0]),函数彻底执行完毕
简单来说,递归就像叠盘子:先一层层往下“叠”(每次加2调用新的函数,执行第一个append),直到触底(n=6不满足条件);然后再从最上面的盘子开始,一层层“拆”回来(执行每个函数里第二个append),所以就出现了先递增后递减的列表。
内容的提问来源于stack exchange,提问作者Nick Halden
相关产品推荐
相关产品推荐

