Wydrukuj wszystkie permutacje ciągu w C

Uczę się cofania i rekurencji i utknąłem w algorytmie drukowania wszystkich permutacji ciągu. Rozwiązałem go za pomocąalgorytm dzwonka dla permutacji, ale nie jestem w stanie zrozumieć metody rekurencji. Przeszukałem sieć i znalazłem ten kod:

void permute(char *a, int i, int n) 
{
   int j; 
   if (i == n)
     printf("%s\n", a);
   else
   {
        for (j = i; j <= n; j++)
       {
          swap((a+i), (a+j));
          permute(a, i+1, n);
          swap((a+i), (a+j)); 
       }
   }
} 

Jak działa ten algorytm, którego nie jestem w stanie zrozumieć? Próbowałem nawet na sucho!

Jak stosuje się śledzenie zwrotne?

Czy obliczanie permutacji jest bardziej wydajne niż algorytm Bell?

questionAnswers(9)

yourAnswerToTheQuestion