递归求全排列
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]