实验内容与完成情况:
读并适当增加必要的代码来调试下面的代码,分析代码功能,发现并解决代码中的错误。
# //运算符 源代码
# 提示:这段代码试图计算组合数Ci n,但是由于浮点数除法时精度问题导致结果错误
# C2 5 = 10,但是以下代码计算C2 5的结果是8(cni(5, 2)),为什么?
def cni(n, i):
minNI = min(i, n-i)
result = 1
for j in range(0, minNI):
result = result * (n-j) // (minNI-j)
return result
出现的问题:
result = result * (n-j) // (minNI-j) 此语句出现问题,因//为整除,执行时5//2时结果为2,而正确的结果应为2.5,所以导致程序结果出错。
解决方案:
将result = result * (n-j) // (minNI-j)语句改为 result = result * (n-j) / (minNI-j)