import sys
num = long(raw_input("Enter the number for the factorial -> "))
sys.setrecursionlimit(num + 1)
def fact(n):
if n == 0 or n == 1:
return 1
else:
return (n * fact(n - 1))
print fact(long(num))
上面是我用于查找阶乘的代码,由于最大递归限制深度是“997”,我尝试使用以下命令更改它:-
import sys
sys.setrecursionlimit()
但是还是报错。我还能做什么?
最佳答案
调用框架也很重要。对于 fact(10)
,您需要 11 帧。传入一个long
整数会导致一些额外的工作,需要另一个框架。将计数加二:
sys.setrecursionlimit(num + 2)
如果您有其他框架调用调用 fact()
函数的代码,请添加更多内容。请注意,首先在输入上调用 long()
确实没有意义;如果需要,Python 将自动生成一个 long
对象。
也就是说,我不会破坏递归限制。也许将其设置为一个较高的值一次,但不要不断调整它。
更好的主意是不使用递归:
def fact(n):
num = 1
while n > 1:
num *= n
n -= 1
return num
或者更好的是,不要重新发明轮子并使用 math.factorial()
反而。从 Python 3.2 开始,Python 实现使用 binary split factorial algorithm (加上前 21 个左右结果的表格)。
关于python - 递归限制给出阶乘函数的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46302998/