def cni2(n, i):
minNI = min(i, n-i)
result = 1
for j in range(0, minNI):
result = result * (n-j) / (minNI-j)
return result
print(int(cni2(5, 2)))
我的问题就是不明白整个代码是什么意思,不知道里边的数学逻辑(但是知道组合的计算原理),就是看不懂代码,看不懂每个函数的意思,尤其是倒数第三行,谢谢!
以5中取3为例:5中取3余下的就是5中取2,因此5中取3和5中取2结果相同,故可取其小者以便简化计算;5中取2的结果是(5×4)/(2×1)。题主的代码不够严谨,我修改了一下,加了注释,仅供参考。
def cni2(n, i):
"""返回n中取i的组合数"""
minNI = min(i, n-i) # n中取i和n中取n-i结果数相同,因此可取其小者计算
result = 1 #结果赋初值
for j in range(minNI): # 1到n的自然数中,最大的minNI个数字乘积除以最小的minNI个数字乘积
result *= (n-j)/(minNI-j)
return int(round(result)) # 返回四舍五入后取整的结果
cni2(5,3)
10
cni2(10,4)
210