#include<stdio.h>
inline void Swap(char& a, char& b)
{
char temp = a;
a = b;
b = temp;
}
void Perm(char list[], int k, int m)
{ /*生成list [k:m ]的所有排列方式
*/
int i;
if (k == m)
{
for (i = 0; i <= m; i++)
putchar(list[i]);
putchar('\n');
}
/* list[k:m ]有多个排列方式
* 递归地产生这些排列方式
*/
else
for (i=k; i <= m; i++) //(m+1)!的全排列
{
Swap (list[k], list[i]); //调换list[k], list[i]的位置
Perm (list, k+1, m);
Swap (list [k], list [i]); //还原
}
}
int main()
{
char s[] = "abcd";
Perm(s,0,3);
return 0;
}
通过画这个程序的堆栈内存图,可以直观地了解递归实现全排列 ,有空我上传下自己画的内存图