递归二项式系数

我必须定义一个函数,它需要两个数字: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 5返回b * fac(b-1)几次。 后面跟着:RuntimeError:比较中超出最大递归深度。

有人可以解释为什么这些功能不适用于大量数据,并可能提供关于我能做些什么来解决这个问题的提示? python如何处理递归和大数?


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))
链接地址: http://www.djcxy.com/p/80679.html

上一篇: Recursion binomial coefficient

下一篇: in Python used for and how/when to use it, and how it works