使用递归实现全排列。123实现全排列!
法1:

上面定义了两个列表,一个列表存的是需要全排列的数据,另一个列表是当做栈来用的,可以把这个递归想成一棵树,在最顶端是包含所有值得列表,之后从这个列表中循环拿掉一个值,到了第二层,这时候栈里面存放的就是拿出来的那个数据,这一层的一个值里面就少了刚刚拿掉的值,一直到最后这个列表为空的时候,栈里面存的就是这个排列的结果,

#!/usr/bin/env python
# encoding:utf-8def perm(list,stack):if not list:print(stack)  # 到树的最后,输出结果else:  # 没有到树的叶子节点的时候,使用递归继续往下找。for i in range(len(list)):stack.append(list[i])del list[i]perm(list,stack)list.insert(i,stack.pop())list=[1,2,3]
stack=[]
perm(list,stack)

同时在python中有一个模块叫做itertools,使用这个模块能够快速的求解排列组合问题
OK,这样理解起来是不是容易多了,这样也能够解释为什么递归其实就是一棵树了。。。当然,也可以使用栈来代替递归实现,不过。。。目前还没实现。区别差不多就是树的递归遍历和非递归遍历的区别吧。
法二、
排列:从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如下:

OUNT=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

[参考连接]【1】
【2】

python 利用递归实现全排列相关推荐

  1. python递归 数字全排列_利用递归实现全排列(python)

    利用递归实现全排列(python) """ 利用递归实现全排列 第一个位置可能有n种可能,第二个位置可能 有n-1种可能...... 代码思路就是第一个位置可以和n个元素 ...

  2. python 利用递归求阶乘

    代码如下 def fac(n):if n==1 or n==0:return 1else:return fac(n-1)*nprint(fac(5)) #120

  3. python3数字全排列怎么搞_python使用递归解决全排列数字示例

    第一种方法:递归 复制代码 代码如下: def perms(elements): if len(elements) <=1: yield elements else: for perm in p ...

  4. Python 多线程、利用request使用代理、利用递归深度抓取电影网页的内容并将电影的介绍和下载链接保存到mysql中

    本文仅为学习python过程的一个笔记,其中还有一些bug! 还请各位大佬赐教 有些专业的说法还不是很熟悉,欢迎各位大佬帮忙指出 本人时一个新晋奶爸,而立之年突然想转业,想学习python 先介绍一个 ...

  5. Python小例子——利用递归绘制分形树

    # -*- coding: utf-8 -*- """作者:宇轩亚40功能:利用递归绘制分形树 """ import turtledef d ...

  6. python非递归前序遍历二叉树_Python非递归实现二叉树的后续遍历

    leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存 ...

  7. python函数递归 斐波那契数列

    4.7 python函数递归 斐波那契数列 代码:(利用递归.format输出等) def fibonacci(n):if n==1 or n==2:f=1else:f=fibonacci(n-1)+ ...

  8. 利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。

    题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来. # -*- coding: utf8 -*- # Author:wxq #python 2.7 #题目:利用递归函数调用方式,将所 ...

  9. python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie)...

    python利用Trie(前缀树)实现搜索引擎中关键字输入提示(学习Hash Trie和Double-array Trie) 主要包括两部分内容: (1)利用python中的dict实现Trie: ( ...

最新文章

  1. 把jquery的this写入选择器里(伪写入)哈哈~
  2. 冒泡排序python代码_Python-排序-冒泡排序-优化
  3. td 超出部分怎么显示_道瑞斯:黄金白银TD走势分析(纸黄金,纸白银,现货黄金,现货白银)...
  4. pt100温度传感器c语言,pt100测温程序-LCD1602
  5. Layer报错:TypeError n.sort is not a function
  6. java定时器 不延时_ScheduledExecutorService 将一个定时任务延迟
  7. 【声学检测】基于matlab MFCC+GMM安全事件声学检测系统【含Matlab源码 1699期】
  8. 数据结构严蔚敏算法设计习题解答(逐渐更新)(更新于2020.11.20)
  9. [ZZ]DevExpress Windows Form(1) DevExpress控件之主题
  10. 詹森不等式到底是什么?
  11. 龙芯2F处理器PMON的编译、加载
  12. 凭什么国内造不出高端示波器?一起扒一扒示波器的发展史!
  13. 解决升级Flutter3.0后出现警告Operand of null-aware operation ‘!‘ has type ‘WidgetsBinding‘ which excludes null
  14. iOS各版本发布时间和特点
  15. 更新资产折旧价值或AW01N查看资产价值提示消息:消息号AU390 - AS02 / AFAR
  16. 现实世界的Windows Azure:与迈阿密市的信息科技助理署长,James Osteen 的访谈 (转)...
  17. vue-router(路由)详细教程
  18. 写给毕业未5年的你和我
  19. 关于Debian10的网络配置
  20. 2022-02-14 influxdb集群coordinator启动及请求处理流程解析

热门文章

  1. Opengl显卡设置问题
  2. 数字化开采|AIRIOT智慧矿山自动化生产解决方案
  3. CTU Open Contest 2017 Pond Cascade
  4. RISC-V 和 Cortex-M 的异同
  5. 无法启动此程序因为计算机中丢失d3dcompiler_47.dll
  6. 虚漠鸿蒙什么意思,好!妙哉妙哉!张济所作之诗不仅符合题意,更是言出了万物伊始乃...
  7. 分枝PEI修饰的PLGA纳米粒/载柚皮素的牛血清白蛋白修饰PLGA纳米粒/包封香豆素-6的PLGA纳米粒
  8. P1873 砍树(二分查找模板)
  9. U-App 应用统计 分享
  10. 二叉树学习笔记(未完待续)