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

时间:2019-06-23 01:00:17

标签: python recursion factorial

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

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

3 个答案:

答案 0 :(得分:1)

1)。您需要在代码中写一个返回。

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

2)。我上传的图片将帮助您理解递归的概念。按照箭头从开始到结束在图片中。 enter image description here

答案 1 :(得分:0)

您需要考虑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。它非常有用且功能强大。

答案 2 :(得分:0)

相对于工作原理,更多的是为什么工作的观点:

递归调用函数与调用其他函数没什么不同:它恰好执行同一组指令。您不必担心Python会在局部变量和不同函数的参数之间造成混淆,也不必担心返回到何处。这没什么不同。实际上,如果每个递归调用都有自己的名称而不是重复使用相同的名称,那么您可能就不会在这里了。

显示其正确运行 有点不同,因为您需要确保递归在某个时刻结束。但这与担心无限循环无异。