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

为什么Python遇到return语句未停止执行?递归阶乘代码运行逻辑疑问

原理说明

Python 的 return 语句确实会终止当前正在运行的这一层函数调用实例,但不会影响其他独立的函数调用,你疑惑的代码是典型的递归(函数调用自身)实现,我们可以拆解开运行逻辑:

核心执行逻辑

return number * inner_factorial(number - 1) 这行代码的执行顺序是:

  1. 先触发新的函数调用 inner_factorial(number - 1)
  2. 等待该调用完全执行完毕,拿到返回结果
  3. 计算 number 和返回结果的乘积
  4. 把乘积作为当前这层函数的返回值,返回给上层调用方,再终止当前层的函数执行

递归的终止条件是 if number <= 1: return 1,当参数满足条件时不会再触发新的调用,直接返回1,避免无限递归导致栈溢出。

具体运行示例

我们以调用 factorial(3) 为例,完整流程如下:

  • 外层参数校验通过后,触发 inner_factorial(3) 调用
  • 第一层调用(参数=3):不满足终止条件,需要计算 3 * inner_factorial(2),先触发 inner_factorial(2),当前层暂停等待结果
  • 第二层调用(参数=2):不满足终止条件,需要计算 2 * inner_factorial(1),先触发 inner_factorial(1),当前层暂停等待结果
  • 第三层调用(参数=1):满足终止条件,直接 return 1,第三层执行结束,返回值1给第二层
  • 第二层拿到返回值1,计算得2 * 1 = 2,return 2,第二层执行结束,返回值2给第一层
  • 第一层拿到返回值2,计算得3 * 2 =6,return 6,第一层执行结束,返回值6给外层factorial函数作为最终结果

关于return逻辑的补充

你对return的理解没有错:每一次return只会终止当前正在运行的那一层函数实例。第三层调用的return只会结束第三层自己的运行,第二层、第一层的调用还处于等待结果的状态,拿到结果后才会执行自己的return逻辑,逐层向上返回。

内容的提问来源于stack exchange,提问作者Berke Balcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:45:05