我必须定义一个带两个数字的函数:n和k(n> = k)并返回这两个数字的二项式系数。
#defining a function that computes the factorial of an integer
def fac(b):
if b==1:
return 1
else:
return b * fac(b-1)
#takes two integers and does the binomial coefficient operand
def combinations(n,k):
result = (fac(n)) / (fac(k) * fac(n-k))
return result
n=10
k=2
print(combinations(n,k))
这适用于小数字,但是当我使用1000等较大的数字时,它不起作用。 它返回:fac返回b * fac(b-1)中的第5行数次。 其次是:RuntimeError:比较时超出了最大递归深度。
有人可以解释为什么这些函数不适用于大数字,并且可能提供有关我可以做些什么来解决此问题的任何提示? python如何处理递归和大数?
答案 0 :(得分:2)
Python默认将递归深度限制为1000。您可以通过在代码的开头添加以下内容来更改它(在此示例中将限制设置为2000):
import sys
sys.setrecursionlimit(2000)
要询问用户输入,请尝试:
n=int(input("Enter n:"))
k=int(input("Enter k:"))
所以这里是完整的代码(只需复制/粘贴):
import sys
sys.setrecursionlimit(2000)
def fac(b):
if b==1:
return 1
else:
return b * fac(b-1)
def combinations(n,k):
result = (fac(n)) / (fac(k) * fac(n-k))
return result
n=int(input("Enter n:"))
k=int(input("Enter k:"))
print(n, k, combinations(n,k))