递归 - Python,返回值问题

Jam*_*ght 4 python recursion stack

我意识到这可能听起来像一个愚蠢的问题,但我最后一次编程它是在汇编程序,所以我的想法可能是关闭的:

递归函数如下:

def fac(n):
    if n == 0:
        return 1
    else:
        return n * fac(n - 1)
Run Code Online (Sandbox Code Playgroud)

为什么当函数达到n == 0时它不返回1而是返回因子.我在思考类似于汇编程序的东西,当n == 0时:

mov eax, 1
ret
Run Code Online (Sandbox Code Playgroud)

为什么上面的代码工作,我想python在那个条件之前返回堆栈的最后一个值?

Ara*_*raK 12

想想这样,fac(5)例如:

return 5 * fac(4)
           return 4 * fac(3)
                      return 3 * fac(2)
                                 return 2 * fac(1)
                                            return 1 * fac(0)
                                                       1
Run Code Online (Sandbox Code Playgroud)

因此1将成为第一个返回值,但将返回到fac(1)fac(1)将返回fac(2)等.

  • +1:请记住,"函数"的返回值不是整个表达式的返回值,它涉及许多乘法和函数调用.这完全是关于"调用堆栈"和评估函数的上下文. (2认同)