python递归全排列实现方法


Posted in Python onAugust 18, 2018

本文实例为大家分享了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=0
def 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
>>>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Web服务器Tornado使用小结
May 06 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python连接DB2数据库
Aug 27 Python
详解Python中类的定义与使用
Apr 11 Python
便捷提取python导入包的属性方法
Oct 15 Python
在python中pandas的series合并方法
Nov 12 Python
Python将string转换到float的实例方法
Jul 29 Python
Window系统下Python如何安装OpenCV库
Mar 05 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
python实战之90行代码写个猜数字游戏
Apr 22 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 Python
讲解Python实例练习逆序输出字符串
May 06 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 #Python
Python在for循环中更改list值的方法【推荐】
Aug 17 #Python
Python简单读写Xls格式文档的方法示例
Aug 17 #Python
Python实现的连接mssql数据库操作示例
Aug 17 #Python
Python SQL查询并生成json文件操作示例
Aug 17 #Python
python3 flask实现文件上传功能
Mar 20 #Python
Python爬取qq空间说说的实例代码
Aug 17 #Python
You might like
PHP面向对象编程快速入门
2006/12/14 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
PHP基础之输出缓冲区基本概念、原理分析
2019/06/19 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
js获得网页背景色和字体色的方法
2014/03/21 Javascript
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
巧用python和libnmapd,提取Nmap扫描结果
2016/08/23 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python取代netcat过程分析
2018/02/10 Python
Python实现简单http服务器
2018/04/12 Python
Python中six模块基础用法
2019/12/08 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
法律专业实习鉴定
2013/12/22 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python