所以我有一个Python 3脚本,它按照以下方式计算组合

def permutate(n, k):

    if k == 0:
        return 1
    elif n < n - k + 1:
        return n
    else:
        return n * permutate(n - 1, k - 1)


def choose(n, k):

    if k > n / 2:
    k = n - k

    return int(permutate(n, k) / permutate(k, k))

所以我的问题是处理大数据时,
choose(5, 3)

得到10,这是正确的。
choose(1000, 1)
choose(52, 4)
choose(1000, 5)
choose(1000, 999)

这些都会产生正确的结果,但是当我试图通过
choose(1000, 800)

我得到了错误的结果,得到的整数部分的头部是正确的,但是当我到达整数的尾部时,它是不正确的,这使我相信问题在于Python试图在choose函数中处理两个非常大的数字的除法。
return int(permutate(n, k) / permutate(k, k))

很抱歉,如果我违反了任何规则,或者代码格式太差,我的第一篇正式文章:)

最佳答案

问题是:所有的除法都使用浮点,而它们显然是以整数为目标的。
Python 3的行为与Python 2不同。

3/2 => 1.5
3//2 => 1

/替换//(不需要像您那样转换整数)
return permutate(n, k) // permutate(k, k)

也在这里(不太重要)
if k > n // 2

10-08 20:04