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多线程编程简单介绍
Apr 13 Python
在Python中使用dict和set方法的教程
Apr 27 Python
Python中的rfind()方法使用详解
May 19 Python
对python中的for循环和range内置函数详解
Apr 17 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
python并发和异步编程实例
Nov 15 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
python3 selenium自动化 下拉框定位的例子
Aug 23 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
python爬虫爬取某网站视频的示例代码
Feb 20 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解答方法
2012/02/04 PHP
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
php从身份证获取性别和出生年月
2017/02/09 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
JS简单实现数组去重的方法分析
2017/10/14 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
解决vue.js提交数组时出现数组下标的问题
2019/11/05 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
Python中生成Epoch的方法
2017/04/26 Python
为什么Python中没有"a++"这种写法
2018/11/27 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
简单了解python变量的作用域
2019/07/30 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
利用Python代码实现一键抠背景功能
2019/12/29 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
迷你唐卡软皮鞋:Minnetonka Moccasin
2018/05/01 全球购物
四风之害观后感
2015/06/09 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang