当前位置: 代码迷 >> python >> 组合计算不正确
  详细解决方案

组合计算不正确

热度:87   发布时间:2023-06-27 21:20:01.0

我在Wikipedia上发现C(n,k)=(n-k + 1)/ k * C(n,k-1)。 我自己做了证据,认为它是正确的。 然后,我在函数中实现了该函数,该函数假定使用递归来计算组合,而不会达到python中的内置限制。 效果很好..直到我投入大量。 这是我的功能:

def choose(n, k):
    if not k: 
        return 1
    elif n < k: 
        return 0
    else:
        return int((((n - k + 1) / k)) * choose(n, (k - 1)))

如果您要使用诸如select(1000,4)之类的较小数字,它会起作用,但是,如果您尝试使用诸如select(1000,800)之类的数字,它将返回正确的前13个数字,但随后会出错。 这是怎么发生的,更重要的是,您如何解决呢?

(n - k + 1) / k通常不是整数,因为k不会总是除以n-k+1 ,尽管它会除以choose(n, (k - 1)) * (n-k+1)

因此,为了始终操作整数(大小不受限制),必须先相乘, 然后使用整数除法除法:

def choose(n, k):
    if k == 0: 
        return 1
    elif n < k: 
        return 0
    else:
        return (n - k + 1) * choose(n, (k - 1)) // k
  相关解决方案