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二叉树遍历的实现方法
Nov 21 Python
Python聚类算法之基本K均值实例详解
Nov 20 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
Apr 10 Python
python文件拆分与重组实例
Dec 10 Python
用Python获取摄像头并实时控制人脸的实现示例
Jul 11 Python
Python绘图实现显示中文
Dec 04 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
Python sys模块常用方法解析
Feb 20 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 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实现CSV文件导入和导出
2015/10/24 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
Javascript中Array.prototype.map()详解
2014/10/22 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
JS基于对象的链表实现与使用方法示例
2019/01/31 Javascript
细述Javascript的加法运算符的具体使用
2019/10/18 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
Python之文字转图片方法
2018/05/10 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Python分类测试代码实例汇总
2020/07/23 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
亿企通软件测试面试题
2012/04/10 面试题
幼师自荐信范文
2013/10/06 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
班级年度安全计划书
2014/05/01 职场文书
2014年个人售房协议书
2014/10/30 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书