版权声明:本文为博主原创文章,转载请附上本博文链接。 https://blog.csdn.net/weixin_41704182/article/details/87933518
设计一个递归算法生成 个元素{ , , ,…, , }的全排序
-
算法讲解:
-
设 { , , ,…, , } 是要进行排列的n个元素, = - 。
-
集合 中元素的全排列记为 。
表示在全排列 的每一个排列前加上前缀得到的排列。 -
的全排列可归纳定义如下:
1、当 时, ,其中 是集合 中唯一的元素。
2、当 时, 由 、 、…、( 构成。 -
实例:{1,2,3}的全排列可以分为3个子数组的全排列:
-
1+{2,3}的全排列:123 132 表示list[1]和list[2]交换。
-
2+{1,3}的全排列:213 231 表示list[0]和list[2]交换。
-
3+{1,2}的全排列:312 321 表示list[0]和list[1]交换。
-
代码如下
#__author:linyingqing #data:2019/2/12 def perm(list, begin): if begin >= len(list): print(list) else: i = begin for num in range(begin, len(list)): list[num], list[i] = list[i], list[num] perm(list, begin + 1) list[num], list[i] = list[i], list[num] if __name__ == "__main__": list = [1, 2, 3, 4] perm(list, 0)