全排列算法 递归出口问题

1.使用全局变量传递返回值
2.利用标准输入输出设备传递返回值
3.在函数参数中加入一个默认入参用于递归之间传递
1.思路:n的全排列可以看做是在n-1全排列基础上插入第n个数
def g(n):
    result = []
    if n == 1:
        return [[0]]
    else:
        for x in g(n - 1):
            for i in range(n):
                x.insert(i, n - 1)
                result.append(x)
                x.remove(n-1)
    return result
2.思路:假设前n-1个数已经排列完好了,那么n个数的排列就是在此基础上添加第n个数(在余下的数里选),直至长度为len(list)
def array(n,lis=[]):
    if n==len(lis):
        global s
        s.append(lis)
    else:
        rest = []
        for i in range(n):
            if lis.count(i) == 0:
                rest.append(i)
        for i in rest:
            lis.append(i)
            array(n,lis)
            lis.remove(i)
//在函数多加一个默认参数,用于传递
def array(n,lis=[],res=[]):
    if n==len(lis):
        res.append(lis)
        return res
    else:
        rest = []
        for i in range(n):
            if lis.count(i) == 0:
                rest.append(i)
        for i in rest:
            lis.append(i)
            res=array(n,lis,res)
            lis.remove(i)
    return res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值