python全排列,递归
"""全排列 用递归方法
全排列:
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全排列,递归相关推荐
- python 全排列 递归中的两种实现
我所知道的全排列有四种: 1.迭代的排列组合全排列(非递归):字典序的大小,即传说中的A33 2.邻位置对换的全排列(非递归): 方法一:生成下一个排列,该方法对重复元素同样有效 如果可以根据一个排列 ...
- python非递归前序遍历二叉树_Python非递归实现二叉树的后续遍历
leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存 ...
- python程序实例电话本-Python基于递归实现电话号码映射功能示例
本文实例讲述了Python基于递归实现电话号码映射功能.分享给大家供大家参考,具体如下: 问题 电话按键上面的每个数字都对应着几个字母,如果按下一个数字键代表输入一个字母,那么输入一个数字组成的字符串 ...
- python用递归方式实现最大公约数_关于python最大递归深度 - 998
今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...
- 数据结构之栈与递归的应用(全排列递归解法)
上一节讲了一下汉诺塔的递归实现,这一节说一下全排列递归解法. 参考了Casionx的博客,给博主带来的不便请原谅.全排列算法思路解析 全排列递归解法 全排列的定义和公式:从n个数中选取m(m< ...
- python函数递归 汉诺塔
4.7 python函数递归 汉诺塔 代码: def hanno(n,A,B,C):global stepif n==1:print('{}->{}'.format(A,C))step +=1e ...
- python函数递归 斐波那契数列
4.7 python函数递归 斐波那契数列 代码:(利用递归.format输出等) def fibonacci(n):if n==1 or n==2:f=1else:f=fibonacci(n-1)+ ...
- python函数递归 字符串反转
4.7 python函数递归 字符串反转 代码: def fanzhuan(s):if len(s)==1:s2=selse:s2=s[-1]+fanzhuan(s[:len(s)-1])return ...
- python关于递归求组合与组合数-通过阶乘, fibonacci加深对递归的理解
python关于递归求组合与组合数: 首先需要找到递归的突破口. 要求如下: Exercise 3: Enumerating Combinations You need to write a func ...
- python以递归的方式实现十进制转二进制算法(附完整源码)
python以递归的方式实现十进制转二进制算法 def binary_recursive(decimal: int) -> str:decimal = int(decimal)if decima ...
最新文章
- mysql数据库设计实践_MYSQL教程分享20个数据库设计的最佳实践
- spring batch (四) Job的配置及配置文件说明介绍
- windows 7硬盘安装Ubuntu 12.04 后出现grub,无法进入系统解决办法
- 如何设计一门语言(八)——异步编程和CPS变换
- JSP页面中四种“返回按钮”的使用
- 细说C#多线程那些事 - 线程同步和多线程优先级
- The Tao to Excellent
- python从数分到数编(part2)--随机数及数组
- 【Hitachi2020C】ThREE【构造】【二分图染色】
- CVPR 2018 paper list(论文列表)
- 计算机工具栏查看,win10工具栏显示网速小工具_技术教程
- 科隆OPTIFLUX2100W/4100C分体式电磁流量计维修
- shell 发送短信
- MyBatisX插件没有出现蓝色鸟
- 防DNS劫持教程,手动修复本地DNS教程
- 大数据技术之Flume —— (1)一文入门学习Flume
- SpringBoot的Bean Definition 生成过程(源码分析)
- win11正式版如何强行安装 Windows11正式版强行安装的步骤方法
- macos+win10切换到ubuntu的全记录
- JDK16 新特性,jdk源码迁移到Github开源社区了