Python k排列数函数num_permutation_v2错误排查求助
问题排查与修正
核心错误点
- 调用
num_permutation_v2(3)时,k取默认值None,触发else分支。该分支循环里执行ban *= 1,无论循环多少次结果始终是1,这就是断言失败的直接原因。 - 条件判断冗余:
elif k is not None and k == 0的情况已经被第一个条件0<=k<=n覆盖,完全没必要单独定义。 - 计算逻辑可优化:先算
n!再除以(n-k)!的方式,当n较大时会产生不必要的大整数运算,直接连乘n*(n-1)*...*(n-k+1)更高效。
修正后的代码
def num_permutation_v2(n, k=None): """Compute the number of k-permutations of n items. Parameters ---------- n: int Number of items to permute. k: int Optional argument indicating the size of each permutation. Default: n Returns ------- int: Number of k-permutations of n items. """ # 处理默认参数,k为None时等价于全排列 if k is None: k = n # 边界条件:k不在合法范围返回0,k=0时返回1(排列定义) if k < 0 or k > n: return 0 if k == 0: return 1 # 计算k排列数:n*(n-1)*...*(n-k+1) result = 1 for i in range(k): result *= (n - i) return result
验证测试
- 运行
assert num_permutation_v2(3) == 6会通过 num_permutation_v2(5, 2)返回20,符合计算逻辑num_permutation_v2(4, 0)返回1,符合排列定义num_permutation_v2(3, 4)返回0,非法输入处理正确
内容的提问来源于stack exchange,提问作者Burak101
相关产品推荐
相关产品推荐

