利用递归实现全排列算法
程序员文章站
2024-03-18 09:11:46
...
研究了一个下午递归实现全排列算法,总算明白了一些东西,我觉得其实更多考验的是对于递归的掌握程度,自己对递归了解的也不多,导致学习上有些难度。
下面为一个示例代码:利用代码实现对字符串"abcd"的全排列打印
#include<stdio.h>
#include<stdlib.h>
void perm1(char ch[],int k,int m){
int i;
if(k==m){
for(i=0;i<=m;i++){
printf("%c ",ch[i]);
}
printf("\n");
return;
}else{
for(i=k;i<=m;i++){
char c=ch[k];
ch[k]=ch[i];
ch[i]=c;
perm1(ch,k+1,m);
c=ch[k];
ch[k]=ch[i];
ch[i]=c;
}
}
}
int main()
{
char ch[]="abcd";
perm1(ch,0,3);
system("pause");
return 0;
}
自己也花了一个图梳理思路,如下(仅以a开头为例,其他类似):
在这之前写了一个交换函数
void swap1(char a,char b){
char c=a;
a=b;
b=c;
}
来简化代码,但是却运行不了,我也不知道为什么,哪位大佬看出问题麻烦提示一下,谢了。