"""全排列 用递归方法

全排列:
1、列表只有一个元素[a],它的全排列只有a。
2、列表有两个元素[a, b],它的全排列为[a, b], [b, a]:
    { 将第一个元素a固定,对b进行全排列得到[a, b]。
    将第一个元素与第二个元素交换得到[b, a]。
    将b固定,对a进行全排列,得到[b, a] }
3、列表有三个元素[a, b, c]
    { 将a固定,对bc进行全排列{ 将b固定,对c全排列[abc]。交换bc,将c固定对b进行全排列[acb] }
     交换ab,[b, a, c] 对ac进行全排列{ ... }
     ... ...}
4、列表有n个元素,将第一个元素固定,对剩下n - 1个元素进行全排列。
    将第一个元素依此与其他元素交换,对每次交换后剩下的n-1个元素进行全排列。
5、对剩下的n - 1个元素全排列,同上,固定后对n - 2排列。
6、直到数组数量为1,全排列就是它自己,完成一次排列。

j = begin
for i in range(begin, end):  # 对begin到end的数组进行i次交换。
    data[i], data[j] = data[j], data[i]  # 交换。
    perm(data, begin + 1, end)  # 交换后对剩下数组进行全排列。[begin + 1, end]
    data[i], data[j] = data[j], data[i]  # 全排列完成后,换回原来的顺序,回到for进行下一次交换。"""

def perm(data, begin, end):
    if begin == end:  # 递归结束条件,当交换到最后一个元素的时候不需要交换,1的全排列还是1。
        print(data)  # 打印一次排列完成后的数组。
    else:
        j = begin
        for i in range(begin, end):  # 从begin到end全排列。
            data[i], data[j] = data[j], data[i]
            perm(data, begin + 1, end)
            data[i], data[j] = data[j], data[i]  # 递归完成后,交换回原来的位置。

arr = [1, 2, 3, 4, 5]
perm(arr, 0, len(arr))

python全排列,递归相关推荐

  1. python 全排列 递归中的两种实现

    我所知道的全排列有四种: 1.迭代的排列组合全排列(非递归):字典序的大小,即传说中的A33 2.邻位置对换的全排列(非递归): 方法一:生成下一个排列,该方法对重复元素同样有效 如果可以根据一个排列 ...

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

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

  3. python程序实例电话本-Python基于递归实现电话号码映射功能示例

    本文实例讲述了Python基于递归实现电话号码映射功能.分享给大家供大家参考,具体如下: 问题 电话按键上面的每个数字都对应着几个字母,如果按下一个数字键代表输入一个字母,那么输入一个数字组成的字符串 ...

  4. python用递归方式实现最大公约数_关于python最大递归深度 - 998

    今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...

  5. 数据结构之栈与递归的应用(全排列递归解法)

    上一节讲了一下汉诺塔的递归实现,这一节说一下全排列递归解法. 参考了Casionx的博客,给博主带来的不便请原谅.全排列算法思路解析  全排列递归解法 全排列的定义和公式:从n个数中选取m(m< ...

  6. python函数递归 汉诺塔

    4.7 python函数递归 汉诺塔 代码: def hanno(n,A,B,C):global stepif n==1:print('{}->{}'.format(A,C))step +=1e ...

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

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

  8. python函数递归 字符串反转

    4.7 python函数递归 字符串反转 代码: def fanzhuan(s):if len(s)==1:s2=selse:s2=s[-1]+fanzhuan(s[:len(s)-1])return ...

  9. python关于递归求组合与组合数-通过阶乘, fibonacci加深对递归的理解

    python关于递归求组合与组合数: 首先需要找到递归的突破口. 要求如下: Exercise 3: Enumerating Combinations You need to write a func ...

  10. python以递归的方式实现十进制转二进制算法(附完整源码)

    python以递归的方式实现十进制转二进制算法 def binary_recursive(decimal: int) -> str:decimal = int(decimal)if decima ...

最新文章

  1. mysql数据库设计实践_MYSQL教程分享20个数据库设计的最佳实践
  2. spring batch (四) Job的配置及配置文件说明介绍
  3. windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
  4. 如何设计一门语言(八)——异步编程和CPS变换
  5. JSP页面中四种“返回按钮”的使用
  6. 细说C#多线程那些事 - 线程同步和多线程优先级
  7. The Tao to Excellent
  8. python从数分到数编(part2)--随机数及数组
  9. 【Hitachi2020C】ThREE【构造】【二分图染色】
  10. CVPR 2018 paper list(论文列表)
  11. 计算机工具栏查看,win10工具栏显示网速小工具_技术教程
  12. 科隆OPTIFLUX2100W/4100C分体式电磁流量计维修
  13. shell 发送短信
  14. MyBatisX插件没有出现蓝色鸟
  15. 防DNS劫持教程,手动修复本地DNS教程
  16. 大数据技术之Flume —— (1)一文入门学习Flume
  17. SpringBoot的Bean Definition 生成过程(源码分析)
  18. win11正式版如何强行安装 Windows11正式版强行安装的步骤方法
  19. macos+win10切换到ubuntu的全记录
  20. JDK16 新特性,jdk源码迁移到Github开源社区了

热门文章

  1. 内存条上的数字代表的意义
  2. 移动互联网终端的touch事件,touchstart, touchend, touchmove
  3. 物联网实训室建设方案
  4. 关于多项目的资源管理方法[范文学习]
  5. 2018年又传喜报!热烈祝贺王家林大师大数据经典著作《Spark SQL大数据实例开发教程》 畅销书籍 出版上市!
  6. ns2利用god获取邻居列表
  7. 华为AP3010DN-V2 Fit转Fat
  8. 解决maven pom依赖的jar无法从私服下载问题【复制大法】
  9. 激光抗大气湍流传输研究取得进展
  10. 【man】getsockopt 和 setsockopt