您的位置:首页 > 其它

使用递归方法实现全排列

2018-02-13 07:32 393 查看
问题:编程实现对任一集合(e.g. {a b c})的全排列。
一、原理分析
总的思路就是,将集合中的每一个元素都和第一个元素交换一下位置,这样就形成了三个新的集合——a{b,c},b{a,c},c{a,b}。再对每一个"{}"括起来的集合进行同样的操作,直到集合中只剩下一个元素时,输出结果,递归程序返回。如下所示:
第一轮交换        进一步交换        因为只剩下1个元素了,递归返回
 a{b,c}           ab{c}                 abc
                  ac{b}                 acb
 b{a,c}           ba{c}                 bac
                  bc{a}                 bca
 c{b,a}           cb{a}                 cba
                  ca{b}                 cab
二、编程实现
下面是Python写的实现代码:# -*- coding:utf-8 -*-

# 功能:递归函数,在设计时要考虑好参数的用途。
# list:要实现全排列的list。
# n:从第几个元素开始进行全排列。
def perm(list, n):
if n == len(list) - 1: #递归返回条件
print list
else:
i = n
while i < len(list):
swap(list, n, i) #交换
perm(list, n + 1) #递归调用
swap(list, n, i) #回复原样
i += 1

def swap(list, i, j):
temp = list[i]
list[i] = list[j]
list[j] = temp

list = ['a', 'b', 'c']
perm(list, 0)
输出结果为:['a', 'b', 'c']
['a', 'c', 'b']
['b', 'a', 'c']
['b', 'c', 'a']
['c', 'b', 'a']
['c', 'a', 'b']DNFM0001 .......... .
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: