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

Python递归函数无return时异常输出的执行流程解析问询

Python递归函数异常输出原理解析

首先明确基础规则:Python中数值类型的函数参数是局部变量,每一层递归的num独立存储,修改不会影响其他层的变量值。

无return版本的异常执行流程

你观察到的乱序重复输出,核心原因是递归调用返回后,当前层的while循环并没有终止,会继续判断条件是否满足,触发重复执行,我们以初始调用recur(0)为例逐段拆解执行过程:

  • 第一层调用num=0,满足0<6:打印0,num自增为1,调用recur(1),进入第二层
  • 第二层调用num=1,满足1<6:打印1,num自增为2,调用recur(2),进入第三层
  • 第三层调用num=2,满足2<6:打印2,num自增为3,调用recur(3),进入第四层
  • 第四层调用num=3,满足3<6:打印3,num自增为4,调用recur(4),进入第五层
  • 第五层调用num=4,满足4<6:打印4,num自增为5,调用recur(5),进入第六层
  • 第六层调用num=5,满足5<6:打印5,num自增为6,调用recur(6),进入第七层
  • 第七层调用num=6,不满足6<6,直接返回,回到第六层的recur(6)调用位置
    • 第六层当前num=6,再次判断while条件不满足,返回,回到第五层的recur(5)调用位置
  • 第五层当前num=5,再次判断while 5<6满足,执行第二次循环:
    • 打印5,num自增为6,调用recur(6)直接返回,再次判断while 6<6不满足,返回,回到第四层的recur(4)调用位置
  • 第四层当前num=4,再次判断while 4<6满足,执行第二次循环:
    • 打印4,num自增为5,调用recur(5),重复上述第六层到第五层返回的逻辑,会依次打印5、5,之后返回第四层,再次判断while 6<6不满足,返回,回到第三层的recur(3)调用位置
  • 以此类推,就会出现你看到的0,1,2,3,4,5,5,4,5,5,3,4,5,5...的重复输出。

加return后输出正常的原因

添加return语句后,递归调用的执行结果会作为当前函数的返回值直接返回,当前函数的执行会立刻终止,不会再回到while循环执行后续的判断和逻辑,所以递归只会沿着「每层num+1调用」的路径一直执行到num=6的终止条件就逐层返回,不会出现循环重复执行的情况,输出自然符合预期。

内容的提问来源于stack exchange,提问作者Ha Tad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:03