Python打印幂集代码出现重复输出的原因排查
代码重复输出问题根本原因分析
- 递归函数内部逻辑冗余,多嵌套了一层不必要的循环
print_subsets函数的核心逻辑是回溯生成子集,正确的逻辑是:选中下标为child_index的元素拼接进当前路径后,只需要递归处理child_index + 1起始的后续位置即可,不需要额外嵌套一层for l in range(child_index + 1, n)循环触发递归。
你当前的写法会导致同一条路径被多次递归触发,比如示例中的重复项[0,1,3]就是这么产生的:
当
child_index = 1时,生成路径[0,1]后,内层循环会分别调用print_subsets(2, [0,1])和print_subsets(3, [0,1]);调用print_subsets(3, [0,1])时会直接打印[0,1,3];调用print_subsets(2, [0,1])时,遍历到child_index = 3又会再次打印[0,1,3],产生重复。
- 外层递归调用逻辑错误,重复触发递归
外层循环for j in range(1, n): print_subsets(j, [nums[0]])属于完全多余的重复触发:
当
j=1调用print_subsets(1, [0])时,已经完整生成了所有包含0、长度大于等于2的子集;后续j=2、j=3的调用又会重新遍历起始下标2、3的位置,重复打印[0,2]、[0,2,3]、[0,3]等子集,进一步放大了重复问题。
内容的提问来源于stack exchange,提问作者Stan
相关产品推荐
相关产品推荐

