所以我有一个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