您的位置:首页 > 其它

递归研究(二) 全排列问题

2015-03-09 22:58 176 查看

Permutation

从n个不同的元素中任取m(m <= n)个, 按照一定的顺序排列起来, 叫做从n个元素中取出m个元素的一个排列, 当m=n时,所有的排列情况叫做全排列.

递归求全排列思路

若求n个元素的全排列, 可以先求n-1个元素的全排列, 然后针对n-1个全排列的每一种情况T, 把第n个元素依次插入到T的n个间隔中.

n=1时,为递归的终结条件.

代码

def permutation(L):
length = len(L)
#终结条件
if length == 1:
return [[L[0]]]
else:
LL = []
#求前n-1个的全排列
n1_permutation = permutation(L[0:-1])
last = L[-1]
#遍历前n-1个全排列
for T in n1_permutation:
for i in range(length):
temp = T[::]
#把第n个元素依次插入到T的n个间隔中
temp.insert(i, last)
LL.append(temp)
return LL


测试

def main():
L = ['A', 'B', 'C', 'D']
LL = permutation(L)
for i in range(len(LL)):
print LL[i]

if __name__ == '__main__':
main()


输出结果

['D', 'C', 'B', 'A']
['C', 'D', 'B', 'A']
['C', 'B', 'D', 'A']
['C', 'B', 'A', 'D']
['D', 'B', 'C', 'A']
['B', 'D', 'C', 'A']
['B', 'C', 'D', 'A']
['B', 'C', 'A', 'D']
['D', 'B', 'A', 'C']
['B', 'D', 'A', 'C']
['B', 'A', 'D', 'C']
['B', 'A', 'C', 'D']
['D', 'C', 'A', 'B']
['C', 'D', 'A', 'B']
['C', 'A', 'D', 'B']
['C', 'A', 'B', 'D']
['D', 'A', 'C', 'B']
['A', 'D', 'C', 'B']
['A', 'C', 'D', 'B']
['A', 'C', 'B', 'D']
['D', 'A', 'B', 'C']
['A', 'D', 'B', 'C']
['A', 'B', 'D', 'C']
['A', 'B', 'C', 'D']
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归