[求助]试设计一个递归算法,产生n!个不同的全排列
如题:设计一个递归算法,产生n!个不同的全排列(注意:是n!个不同的全排列,不是求n!的数值)
不要求写出原代码用类C写写算法就可以,我只想知道算法,谢谢大家!
有能力的帮帮在下,不胜感谢!
斑竹的说法我怎么觉得像循环呢?
以下是我从网上找的算法,不过不是太懂.
#include <stdio.h>
void permutation(char a[], int m, int n)
{
int i;
char t;
if (m<n-1) {
permutation(a, m+1, n);
for (i=m+1;i<n;i++) {
t=a[m]; a[m]=a[i]; a[i]=t;
permutation(a, m+1, n);
t=a[m]; a[m]=a[i]; a[i]=t;
}
} else
{
printf("%s ", a);
}
}
int main() {
char a[]="ABCDE";
permutation(a, 0,5);
return 0;
}
这个就是我说的递归。
swap(perm[i], perm[k]); //保留i,交换的作用因为每个数唯一不重复
genPermutation(k + 1, n, perm); //递归,就是把保留i以后的参加递归
swap(perm[i], perm[k]); //还原
EX:
1,2,3
先保留1,交换1,1 递归23
保留2,交换2,2,递归3
保留3,交换3,3,输出;
然后一步步返回。