今天看见一个全排列的递归算法觉得非常巧妙,稍稍改进了一下函数的接口,更方便的运用:

def Allrange(lyst,start,end,result):

    if start == end:

        result.append(copy.copy(lyst))

    for i in range(start,end+1):

        lyst[i],lyst[start] = lyst[start],lyst[i]

        Allrange(lyst,start+1,end,result)

        lyst[i],lyst[start] = lyst[start],lyst[i]

    return result

图片.png
对于python2版本没有列表浅拷贝,就引用copy模块
python3 可以直接调用 list.copy()方法。

图片.png
纠结的人总喜欢弄清递归的每一步变化,所以可以在数据变化之后立刻输出,人工监视递归数据的变化。
我就很佩服那种递归一写终止条件一写就能直接运行的人,我一般都得演练两三轮。大家有好的方法可以告诉我!


尹某某
1 声望1 粉丝

机器学习爱好者