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:相比之下超出了最大递归深度
对于像数字阶乘这样的简单函数,您应该尽量避免递归。递归确实很强大,但有时会无缘无故地过度使用。
以下是阶乘函数迭代版本的代码:
def fact(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
Run Code Online (Sandbox Code Playgroud)
请注意 Maxime 在上一个答案中所说的话,这正是您遇到的问题:您的函数没有考虑 0 的阶乘。