为什么Python遇到return语句未停止执行?递归阶乘代码运行逻辑疑问
原理说明
Python 的 return 语句确实会终止当前正在运行的这一层函数调用实例,但不会影响其他独立的函数调用,你疑惑的代码是典型的递归(函数调用自身)实现,我们可以拆解开运行逻辑:
核心执行逻辑
return number * inner_factorial(number - 1) 这行代码的执行顺序是:
- 先触发新的函数调用
inner_factorial(number - 1) - 等待该调用完全执行完毕,拿到返回结果
- 计算
number和返回结果的乘积 - 把乘积作为当前这层函数的返回值,返回给上层调用方,再终止当前层的函数执行
递归的终止条件是 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ı
相关产品推荐
相关产品推荐

