思想:排列问题最主要是Perm()函数,例如一个很简单的例子如下:
数列是:1 2 3
当n=1时,则递归出口,换种说法就是当n=m时,也就是数列中只剩下一个数的时候,则表示交换已经结束,此时需要把这一排打印出来。
当n<m时,说明没有交换结束,则继续交换下去,但是需要注意的是,当每次我交换完之后,也是就递归结束时,我需要把数列还原为原来的数列,不然,在进行交换输出后会得不到全部,而且还会有重复;
下面我以1 2 3为例举例子然后进行理解理解:
第一次:1 2 3为本身,因为一开始都是本身和本身进行交换,所以在递归结束后,交换后缀还是本身。
第二次:1Perm(2,3);也就是1被分割出去,然后进行交换2和3;变为1 3 2
。。。。。。。。。。。。。以此下去;;;;;;
1 2 3
1 2 3
2 3 1 3 1 2
3 2 3 1 2 1
#include<stdio.h>
#include<iostream>
#include&l