Python递归实现全排列
大家好,又见面了,我是你们的朋友全栈君。
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列;
全排列:当n==m时,称为全排列;
比如:集合{ 1,2,3}的全排列为:
{ 1 2 3}
{ 1 3 2 }
{ 2 1 3 }
{ 2 3 1 }
{ 3 2 1 }
{ 3 1 2 }
递归思想: 取出数组中第一个元素放到最后,即a[1]与a[n]交换,然后递归求a[n-1]的全排列
1)如果数组只有一个元素n=1,a={1} 则全排列就是{1} 2)如果数组有两个元素n=2,a={1,2} 则全排列是: {2,1}–a[1]与a[2]交换。交换后求a[2-1]={2}的全排列,归结到1) {1,2}–a[2]与a[2]交换。交换后求a[2-1]={1}的全排列,归结到1) 3)如果数组有三个元素n=3,a={1,2,3} 则全排列是 { {2,3},1}–a[1]与a[3]交换。后求a[3-1]={2,3}的全排列,归结到2) { {1,3},2)–a[2]与a[3]交换。后求a[3-1]={1,3}的全排列,归结到2) { {1,2},3)–a[3]与a[3]交换。后求a[3-1]={1,2}的全排列,归结到2) … 依此类推。
利用python实现全排列的具体代码perm.py如下:
COUNT=0def perm(n,begin,end): global COUNT if begin>=end: print n COUNT +=1 else: i=begin for num in range(begin,end): n[num],n[i]=n[i],n[num] perm(n,begin+1,end) n[num],n[i]=n[i],n[num]n=[1,2,3,4]perm(n,0,len(n))print COUNT
最后输出的结果如下:
======================== RESTART: D:/Python27/perm.py ========================
[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
[1, 3, 4, 2]
[1, 4, 3, 2]
[1, 4, 2, 3]
[2, 1, 3, 4]
[2, 1, 4, 3]
[2, 3, 1, 4]
[2, 3, 4, 1]
[2, 4, 3, 1]
[2, 4, 1, 3]
[3, 2, 1, 4]
[3, 2, 4, 1]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
[3, 4, 2, 1]
[4, 2, 3, 1]
[4, 2, 1, 3]
[4, 3, 2, 1]
[4, 3, 1, 2]
[4, 1, 3, 2]
[4, 1, 2, 3]
24
>>>
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148493.html原文链接:https://javaforall.cn
相关文章
- OpenCV—python 边缘检测(Canny)「建议收藏」
- leetcode之 两数之和 题目解答C/python
- 如何在 Python 中使用断点调试
- python实现卷积操作
- Python怎么输入小数和整数_python输入非负整数
- Python项目47-前后端分离登录注册页(继续撸)
- python测试框架unittest如何设置用例优先级_python 的 unittest 测试框架中的测试依赖怎么解决呢…[通俗易懂]
- python语法(二)——截取字符串的方法详解
- Python爬取网易云歌曲评论,做词云分析
- Python中线程同步与线程锁「建议收藏」
- python实现K近邻算法案例
- Python/GUI/tkinter/学生信息管理系统源码
- 关于获取每个月第几周的第一天是周几和最后一天是几号 python
- Python-基础03-流程控制
- python 函数、运算符以及运算符优先级
- maven找不到包但是确实引入了_idea写python好吗
- 2022年最新Python大数据之Python基础【九】面向对象与继承
- Python调用Prometheus监控数据并计算
- 修改python的pip源为国内源[通俗易懂]
- Python继续霸榜,SQL写得溜,面试或许能加分