字符串全排列问题能够很好体现递归算法的特点,以及递归在解决实际问题中的巧妙之处。
问题描述: 例如输入“abc”,则其全排列为 abc acb bac bca cab cba
递归解决方案 ,递归减少所要排列的字符串个数,直至得到递归的边界条件:字符串个数为1时直接输出字符串;
C代码实现:
void permutation(char s[], int b, int e)
{
if((b>=0)&&(b<=e))
{
if( b==e )
{
printf("%s\n",s);
}
else
{
int i = 0;
for(i=b; i<=e; i++)//需要循环把元素放在第一个位置
{
char c = s[b]; //把元素放在第一个位置
s[b] = s[i];
s[i] = c;
permutation(s, b+1, e); //对剩余的元素进行全排列
c = s[b]; //把元素顺序还原,以备下一次交换
s[b] = s[i];
s[i] = c;
}
}
}
}