前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python递归实现全排列

Python递归实现全排列

作者头像
全栈程序员站长
发布2022-09-07 12:56:15
7220
发布2022-09-07 12:56:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

排列:从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如下:

代码语言:javascript
复制
COUNT=0def 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

最后输出的结果如下:

代码语言:javascript
复制
======================== 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
>>> 

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148493.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档