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

Python递归实现数组排列出错:结果全为原数组,求问题排查

数组排列递归实现的问题排查

你的代码逻辑框架是对的,但核心问题出在列表的引用传递特性上:

你在递归终止时执行ans.append(a),这里添加的是数组a的引用,而不是当前状态下数组的副本。后续的回溯操作(交换回来)会修改这个数组的内容,最终所有存入ans的引用指向的都是最后回溯完成后的原数组[1,2,3],所以输出全是相同的结果。

修正方案

只需要在终止条件处,将数组的副本存入结果列表即可,比如用a.copy()或者list(a)创建副本:

ans = []
def helper(a, i):
    if i == len(a):
        ans.append(a.copy())  # 改为添加数组副本
    for j in range(i, len(a)):
        a[i],a[j] = a[j], a[i]
        helper(a, i+1)
        a[i],a[j] = a[j], a[i]

helper([1,2,3],0)
    
print(ans)

运行结果

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:12:03