相比之下超过了最大递归深度

Dan*_*ook 3 python recursion combinations factorial

我写了这段代码来计算组合数:

def fact(n):
    return 1 if(n == 1) else n * fact(n - 1)

def combinations(n,k):
    return fact(n)/((fact(n - k) * fact(k)))

while(True):
    print(combinations(int(input()), int(input())))
Run Code Online (Sandbox Code Playgroud)

阶乘函数似乎工作正常。但是为什么当我尝试找到两个数字的组合时,它会给我一个最大递归深度超过比较错误?阶乘函数是否有问题,因为这似乎是错误的来源?

这是我得到的错误:

builtins.RuntimeError:相比之下超出了最大递归深度

eca*_*ver 5

对于像数字阶乘这样的简单函数,您应该尽量避免递归。递归确实很强大,但有时会无缘无故地过度使用。

以下是阶乘函数迭代版本的代码:

def fact(n):
    result = 1
    for i in range(2, n + 1):
        result *= i
    return result
Run Code Online (Sandbox Code Playgroud)

请注意 Maxime 在上一个答案中所说的话,这正是您遇到的问题:您的函数没有考虑 0 的阶乘。