Python实现k维超蛋糕n次切割最大块数:代码错误排查
问题修正方案
原代码问题分析
total = 0被放在while循环内部,每次迭代都会重置累加器,无法累计数值return total写在while循环里,第一次循环就直接返回结果,只计算了C(6,5)这一项- 未覆盖公式要求的完整累加范围:需要从
C(n,0)累加到C(n,k),原代码只处理了k到2的项
修正后的代码
def hypercake(n, k): def combinations(n, r): def factorial(n): if n <= 1: return 1 else: return n * factorial(n - 1) if 0 <= r <= n: # 用整数除法避免浮点数结果 return factorial(n) // (factorial(r) * factorial(n - r)) else: return 0 total = 0 # 遍历从0到k的所有整数,累加每一项组合数 for r in range(0, k + 1): total += combinations(n, r) return total print(hypercake(6, 5)) # 输出63
关键修正点
- 将累加器
total的初始化移到循环外部,确保不会被反复重置 - 使用
for循环遍历0到k的所有取值,覆盖公式要求的全部项 - 把
return语句移到循环结束后,保证完成所有项的累加再返回结果 - 改用整数除法
//,确保返回整数结果(原代码用/会得到浮点数63.0)
内容的提问来源于stack exchange,提问作者noitskelvin
相关产品推荐
相关产品推荐

