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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:05:18