Python函数多return语句行为解析——以递归阶乘代码为例
递归函数中return语句的行为解析
先看你的代码:
def fact(n): if n == 0: return 2 return n*fact(n-1) print(fact(5))
为什么终止条件的返回值会被相乘?
我们拆解fact(5)的完整执行流程:
- 调用
fact(5):n≠0,执行5 * fact(4),等待fact(4)的返回值 - 调用
fact(4):n≠0,执行4 * fact(3),等待fact(3)的返回值 - 调用
fact(3):n≠0,执行3 * fact(2),等待fact(2)的返回值 - 调用
fact(2):n≠0,执行2 * fact(1),等待fact(1)的返回值 - 调用
fact(1):n≠0,执行1 * fact(0),等待fact(0)的返回值 - 调用
fact(0):触发if条件,直接返回2
从最底层往回计算结果:
fact(1) = 1 * 2 = 2fact(2) = 2 * 2 = 4fact(3) = 3 * 4 = 12fact(4) = 4 * 12 = 48fact(5) = 5 * 48 = 240
5的阶乘是120,240正好是120×2——这是因为终止条件返回的2,作为递归链条的「起始值」,被每一层的n依次相乘,最终成为整个结果的乘数。
Python中多个return语句的行为机制
- 函数中的每个return语句的核心作用是:立即终止当前函数的执行,并将指定的值返回给调用它的地方。
- 同一函数调用中,只会执行其中一个return——满足哪个条件就执行哪个,不会同时触发多个。比如你的代码里,n=0时执行第一个return,其他情况执行第二个return。
- 在递归场景下,下层函数return的值会作为上层函数中表达式的一部分(比如
fact(n-1)就是n*fact(n-1)这个表达式的一部分),所以上层函数会用这个返回值完成计算后,再把自己的结果return给更上层。
简单说:你看到的「相乘」不是因为多个return直接交互,而是递归调用的链条传递导致的——终止条件的返回值被每一层递归拿来参与计算,最终成为结果的一部分。
内容的提问来源于stack exchange,提问作者Abdul Basit
相关产品推荐
相关产品推荐

