python - 递归——Python,返回值问题

标签 python recursion stack

我意识到这听起来像是一个愚蠢的问题,但我上次编程时是用汇编程序编写的,所以我的想法可能不对:

这样的递归函数:

def fac(n):
    if n == 0:
        return 1
    else:
        return n * fac(n - 1)

为什么当函数达到 n == 0 时它不返回 1 而是返回阶乘的答案。我在想类似在汇编程序中 n == 0 时的情况:

mov eax, 1
ret

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

最佳答案

这样想,以fac(5)为例:

return 5 * fac(4)
           return 4 * fac(3)
                      return 3 * fac(2)
                                 return 2 * fac(1)
                                            return 1 * fac(0)
                                                       1

因此 1 将是第一个 返回值,但它将返回到 fac(1)fac(1) 将返回到 fac(2) 等等。

关于python - 递归——Python,返回值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601757/

相关文章:

c++ - 尝试使用堆栈创建队列。为什么我会收到 void 到 int 转换错误?

java - 如何避免 ArrayIndexOutOfbounds 异常?

python - 仅对某些行求和两个不同大小的 pandas 数据帧的列

python - 将代码转换为 exe 或 GUI 应用程序

c - 递归数函数返回意外值

C编程十进制转二进制——递归方法中添加前导零

python - python 查找字符串中的连续字母

python - 为 SQLAlchemy 多对多数据库设置关系/映射

python - 混淆 Pyramid 授权、__acl__ 和 RootFactory

C - 在 while 中获取 char 并压入堆栈