算法思考-1-求n个不同字符的全排列-递归

 1 #include <stdio.h>
 2 
 3 void perm(char str[],int k,int n)//递归求str[0]~str[k]的全排列
 4 {
 5     int i,j;
 6     char tmp;
 7     if(k==0)
 8     {
 9         for(j=0;j<n;j++)
10             printf("%c\t", str[j]);
11         printf("\n");
12     }
13     else
14     {
15         for(i=0;i<=k;i++)
16         {
17             tmp=str[k];//交换str[k]和str[i]
18             str[k]=str[i];
19             str[i]=tmp;
20             perm(str,k-1,n);//对于str[k]位置,可以取str[0]~str[k]任何值,递归至k==0打印输出
21             tmp=str[k];//交换回来str[k]和str[i]
22             str[k]=str[i];
23             str[i]=tmp;            
24         }
25     }
26 }
27 int main(int argc, char const *argv[])
28 {
29     char a[]="123";
30     perm(a,2,3);
31 
32     return 0;
33 }

运行结果:

 

posted @ 2019-11-24 21:05  细雨轻风  阅读(856)  评论(0)    收藏  举报