从n = 8开始出错:"调用Python对象时超出了最大递归深度"

时间:2016-09-17 23:41:12

标签: python recursion

我已经看过其他类似的主题,但我无法应用解决方案来解决以下代码给出的错误:

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开始出现错误。

2 个答案:

答案 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)