文章目录
- 一、递归
-
- 1.思路
- 2.代码及解析
- 二、引用标准库函数
一、递归 1.思路 【python|python递归实现全排列函数(代码+解析)】对于一个有n个元素的列表,其所有的全排列可以分为n类,其中第i类中包括以i开头的序列。比如说,对于序列【1,2,3】来说,他的全排列可以分为3类,第1类包括【1,2,3】【1,3,2】; 第2类包括【2,1,3】【2,3,1】; 第3类包括【3,1,2】【3,2,1】。不难看出,每类中除了固定的第一个元素,其后所有元素是对除第一个值之外的n-1个元素进行全排列。
由此可见,对于一个有n个元素的列表,其所有的全排列可以这样求出:对所有元素,依次将其放在第一个固定,然后对剩下的n-1个元素进行全排列,直到所有元素都被固定,需要排列的元素个数为1,其全排列就是它自己。从这里可以看出,全排列可以通过递归实现。
2.代码及解析 qpl()函数传入begin这个参数,是本次调用函数需要排列的头指针(下标),也可以看作是前面已固定的元素个数,使用时一般为0.参数n为需要排序的列表。
源码如下:
def qpl(n,begin):#n是需要排序的列表,begin是本次需要排列的头指针(下标),也可以看作是前面已固定的元素个数
end=len(n)#记录元素个数
if begin==end: #递归的结束条件,全部都已固定,可以输出
print(n)
else:
i=begin #指向本次需要排列的第一个位置(本轮需要固定的位置
for num in range(begin,end):#num遍历本次需要排列的序列中的每一个数,
n[num],n[i]=n[i],n[num]#依次把这些数放在固定的位置上,方法是交换
qpl(n,begin+1) #不看那个已经固定的数
n[num],n[i]=n[i],n[num] #回溯,回到上一步,再进行下一次for循环n=[1,2,3]
qpl(n,0)
输出结果为:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
二、引用标准库函数 这个比较简单不多赘述,但itertools库真的好用!!
import itertools
print(list(itertools.permutations([1,2,3],3)))
推荐阅读
- #|送给小公主的一首诗——闪光屏幕书写(Python实现)
- python|python 人工智能学习 遗传算法实现图片再现。
- 编程|基于Matlab的遗传算法在图像分割问题中的应用
- #|神奇的量子世界——量子遗传算法(Python&Matlab实现)
- 机器学习|遗传算法(GA)的原理简介与应用【python实现】
- 优化算法|遗传算法Python代码实现
- 遗传算法|遗传算法(GA)原理以及matlab与python实现
- #|达尔文与老子的对话【伏羲八卦图】(Python&Matlab实现)
- python|opencv-python 入门实战(传统方法Hog+svm实现目标检测)