递归求全排列

2020-03-31  本文已影响0人  想象_442c

思路:

                和手动求全排列一样,第一个位置有n种可能,第二个位置有n-1种可能......最后一个位置有1种可能

                

                第一个位置的n种可能就是与其他每个位置的元素进行交换来遍历,每种可能对应的后续位置的可能性就进入递归来描述,

递归之后进行回溯,来进行第一个位置的下一次遍历,循环往复,直到递归到最后一个位置,进行check,然后退出递归

代码:

def f(l,begin,end):

    #退出条件

    if(begin==end):

        check(l)

        return

    #递归

    for i in range(begin,end):

        #让开始位置和后面的所有位置都做交换,然后进行下一次递归

        l[begin],l[i]=l[i],l[begin]

        f(l,begin+1,end)

        #进行回溯进入下一次循环

        l[begin],l[i]=l[i],l[begin]

上一篇下一篇

猜你喜欢

热点阅读