我无法理解递归中的 return 命令

I have trouble understanding the return command in recursion

def fac(n):
    if (n < 1):
        return 1
    else:
        n * fac(n-1)
print fac(4)

为什么 return 命令会导致函数返回并乘以阶乘?我很难理解这一点。

你需要考虑call stack。这段代码需要运行的方式是每个 fac(n) 等于 n * (n-1) * (n-2) ... (n - n + 1)

您的代码有误。要使 recursive 函数起作用,您必须每次都返回一个值。你得到 None 回来,因为你从来没有返回任何东西。

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


if __name__ == "__main__":
    num = 2
    print(fac(num))

继续练习recursion。它非常有用和强大。

1).您需要在代码中写一个 return 。

def fac(n):
if (n < 1):
    return 1
else:
    return n * fac(n-1)
print(fac(4))

2).我正在上传一张图片,这将帮助您理解递归的概念。按照图中的箭头从头到尾。

关于它为什么起作用而不是它如何起作用的观点:

递归调用一个函数与调用一个不同的函数没有什么不同:它只是恰好执行相同的指令集。您不必担心 Python 混淆局部变量和不同函数的参数,或者不知道 return 去哪里;这也不例外。事实上,如果每个递归调用都有自己的名字而不是 re-using 相同的名字,你可能就不会在这里了。

显示它正常工作有点不同,因为您需要确保递归在某个时刻结束。但这与担心无限循环没有什么不同。