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

标签 python recursion

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/

相关文章:

python - 如何使用重复键合并多个字典中的数据?

sql - 用于更新列的递归 PostgreSQL 查询

sql - 将平面表解析为树的最有效/优雅的方法是什么?

python - Python中的递归组合字符串搜索

c - 递归中递归函数的内存分配?

python - 结合递归和yield进行树遍历

python - 使用 XPath 获取第二个元素文本?

python - 如何在 Python 中重复 x 分钟?

Python:将二维二进制值数组打包到 UINT64 数组中的最快方法

python - 如何将图像转换为 dicom 图像?