首页 > 代码库 > 递归写出字符串全排列

递归写出字符串全排列

给出一个字符串,例如“abc”,输出它的全排列及“abc”,"acb","bac","bca","cab","cba"。

递归的方法:

    核心思想:交换。

    全排列(“abc”)=a.全排列(“bc”)+b.全排列("ac")+c.全排列(“ab”),其中a.全排列(“bc”)=ab.全排列(“c”)+ac.全排列(“b”)=abc+acb

    

void swap(char *p, char *q){         char temp=*p;         *p=*q;         *q=temp;}void perm(char *psStr, int k, int m){         int i;         if(k==m){                 printf("%s\n", psStr);         }         else{                 for(i=k;i<=m;i++){                         swap(psStr+k, psStr+i);//交换开始位置与i位置的值                         perm(psStr, k+1, m);                         swap(psStr+k, psStr+i);//返回原来的样子,防止出现重复的结果                 }         }}

 

递归写出字符串全排列