我编写了这段代码来计算组合数量:
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())))
阶乘函数似乎可以正常工作。但是,当我尝试找到两个数字的组合时,为什么在比较错误中却给了我最大的递归深度?阶乘函数有什么问题,因为那似乎是错误的根源?
这是我得到的错误:
builtins.RuntimeError:比较中超出了最大递归深度
尝试更换:
def fact(n): return 1 if(n == 1) else n * fact(n - 1)
至:
def fact(n): return 1 if(n <= 1) else n * fact(n - 1)
因为如果您传递2个相同的数字,则将尝试计算fact(0)(将调用fact(-1)和fact(-2),直到最大递归深度错误为止)。
fact(0)
fact(-1)
fact(-2)