我已经看过其他类似的主题,但我无法应用解决方案来解决以下代码给出的错误:
def mult_recursive(a,b):
if b == 1:
return a
else:
return a + mult_recursive(a,b-1)
def factorial_recursive(n):
if n == 0:
return 1
elif n == 1:
return 1
else:
return mult_recursive(n,factorial_recursive(n-1))
print (factorial_recursive(8))
仅当您选择n> = 8时才会出错。在0到7范围内的n工作正常。
如果你可以回答我为什么会收到这个错误,那会很棒。 谢谢。
PS1:如果交换mult_recursive fct的参数,代码适用于所有数字 (n,factorial_recursive(n-1))=> (factorial_recursive(n - 1),n)
PS2:我知道有更简单,更好的方法来计算阶乘,但我只想了解为什么从n = 8开始出现错误。
答案 0 :(得分:2)
您收到该错误是因为您已超出最大递归深度。你究竟误解了什么?逐行进行并计算您拨打的电话深度。如果超过最大递归深度,那么就完成了。似乎n==8
你超过它。对于降低,你没有。
这是有道理的,因为对于n==8
,你有factorial_recursive(n-1) == 5040
,因此mult_recursive(n, factorial_recursive(n-1))
执行5040
嵌套调用。这绝对太过分了。
对于n == 7
,您只能进行720
嵌套调用。默认情况下,最大递归为1000
(可能取决于你的机器/ python版本),所以你去了。
答案 1 :(得分:0)
只是为了说明你可以通过设置递归深度来实现8。 在代码的开头包含两个语句:
import sys
sys.setrecursionlimit(n)
这里n是递归深度。如果将其设置为5042,则该功能正常。 对于大于8的数字,请将递归深度设置得更高 例如: sys.setrecursionlimit(10000)