You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

逻辑相同的Python递归全排列代码为何输出不同?

两段全排列递归代码输出差异的原因

核心区别在于对subset列表的处理逻辑:

  • 第一段代码使用subset+[nums[i]]传递参数:
    这个操作会生成全新的列表对象,把原subset的元素与新元素合并后传入下一层递归。当触发终止条件时,res.append(subset)存入的是当前完整排列的独立副本,后续的回溯操作不会影响已经存入res的列表,因此最终能得到正确的全排列结果。

  • 第二段代码直接修改同一个subset对象:
    全程复用同一个subset列表,通过append和remove在递归前后修改它的内容。当触发终止条件时,res.append(subset)存入的是这个列表的引用而非副本。等所有递归完成后,回溯操作已经把subset里的元素全部移除,res中所有引用指向的都是同一个空列表,因此输出全为[]。

如果要修复第二段代码,只需在终止条件处存入列表的副本即可,比如把res.append(subset)改成res.append(subset.copy())或者res.append(subset[:])。

内容的提问来源于stack exchange,提问作者Harsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:40:48