我无法理解递归中的 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 相同的名字,你可能就不会在这里了。
显示它正常工作有点不同,因为您需要确保递归在某个时刻结束。但这与担心无限循环没有什么不同。
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 相同的名字,你可能就不会在这里了。
显示它正常工作有点不同,因为您需要确保递归在某个时刻结束。但这与担心无限循环没有什么不同。