字符串排列 - 这种回溯递归如何工作?

时间:2015-08-04 13:43:16

标签: c string recursion

此函数基本上通过交换字符及其所有其他字符来打印字符串的所有可能排列。我理解前两次调用swap和permute。但为什么第二次调用掉掉?我无法理解这段代码。有人可以解释一下这是如何运作的吗?

/* Function to print permutations of string
   This function takes three parameters:
   1. String
   2. Starting index of the string
   3. Ending index of the string. */
void permute(char *a, int l, int r)
{
   int i;
   if (l == r)
     printf("%s\n", a);
   else
   {
       for (i = l; i <= r; i++)
       {
          swap((a+l), (a+i));
          permute(a, l+1, r);
          swap((a+l), (a+i)); //backtrack
       }
   }
}

1 个答案:

答案 0 :(得分:2)

&#34;回溯&#34;将字符串交换回原始状态,这对于正确运行算法至关重要。

你不希望你的函数弄乱输入字符串,不是吗?