")) sys.setrecursionlimit(num-6ren">
gpt4 book ai didi

python - 递归限制给出阶乘函数的错误

转载 作者:行者123 更新时间:2023-11-30 22:29:36 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com