首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >递推二项式系数

递推二项式系数
EN

Stack Overflow用户
提问于 2014-10-15 17:12:27
回答 1查看 7.2K关注 0票数 0

我必须定义一个函数,它接受两个数字:n和k (n,>=,k),并返回这两个数字的二项式系数。

代码语言:javascript
代码运行次数:0
运行
复制
#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如何处理递归和大数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-15 17:26:15

默认情况下,Python将递归深度限制在1000。您可以通过在代码开始时添加以下内容来改变这一点(在本例中将限制设置为2000 ):

代码语言:javascript
代码运行次数:0
运行
复制
import sys
sys.setrecursionlimit(2000)

若要向用户询问输入,请尝试:

代码语言:javascript
代码运行次数:0
运行
复制
n=int(input("Enter n:"))
k=int(input("Enter k:"))

下面是完整的代码(只需复制/粘贴它):

代码语言:javascript
代码运行次数:0
运行
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26388226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档