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
相关产品推荐
相关产品推荐

