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

如何将打印全排列的三层循环Python函数改写为递归函数

递归实现排列打印函数方案

实现思路

你原来的固定三层循环只能处理长度为3的列表,递归版本可以适配任意长度的输入列表,核心逻辑如下:

  • 用一个数组记录已经使用过的索引,避免重复选取同一位置的元素
  • 每一层递归负责确定排列中一个位置的元素,选好后进入下一层递归选下一个位置的元素
  • 当当前排列的长度等于原输入列表的长度时,说明已经完成一组有效排列,直接打印即可
  • 每完成一个分支的递归后要做回溯,取消索引的使用标记,供其他排列分支使用

完整代码实现

def permute_recursive(L, current_perm=None, used_index=None):
    # 初始化参数,避免Python可变默认参数的异常问题
    if current_perm is None:
        current_perm = []
    if used_index is None:
        used_index = []
    
    # 递归终止条件:当前排列长度等于原列表长度,打印结果
    if len(current_perm) == len(L):
        print(' '.join(map(str, current_perm)))
        return
    
    # 遍历所有索引,选未使用的加入当前排列
    for i in range(len(L)):
        if i not in used_index:
            # 标记当前索引已使用,加入排列
            used_index.append(i)
            current_perm.append(L[i])
            # 递归选下一个元素
            permute_recursive(L, current_perm, used_index)
            # 回溯,撤销标记供其他分支使用
            current_perm.pop()
            used_index.pop()

# 测试调用
permute_recursive([1,2,3])

运行输出

和你原有三层循环实现的输出完全一致:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:07