Verständnis der Rekursion zum generieren von Permutationen

Ich finde Rekursion, abgesehen von sehr geradlinig, wie die Faktoren -, die sehr schwer zu verstehen. Das folgende snippet gibt alle Permutationen eines Strings. Kann mir jemand helfen, es zu verstehen. Was ist der Weg, um darüber zu gehen zu verstehen, Rekursion richtig.

void permute(char a[], int i, int n)
{
   int j;
   if (i == n)
     cout << a << endl;
   else
   {
       for (j = i; j <= n; j++)
       {
          swap(a[i], a[j]);          
          permute(a, i+1, n);
          swap(a[i], a[j]);
       }
   }
} 

int main()
{
   char a[] = "ABCD";
   permute(a, 0, 3);
   getchar();
   return 0;
}
Skizzieren Sie es heraus auf Papier, oder Sie können auch versuchen Einzelschritt durch den code in einem debugger.
Hinzufügen für einige eine neue: Schreiben Sie ein C-Programm zum drucken aller Permutationen einer gegebenen Zeichenfolge
Erste Sache ist, dass die Rekursion nur manchmal Ergebnisse in den eleganten, intuitiven Lösungen. Manchmal ist die Lösung ist elegant aber überhaupt nicht intuitiv, wie ich glaube, es ist hier. Manchmal ist es weder elegant, noch intuitiv. Könnte es etwas unelegant und doch intuitiv? Ich weiß es nicht. In diesem Fall ist die erste Sache, die Sie brauchen, um zu verstehen, konzeptionell, ist, wie man alle Permutationen, die durch vertauschen von verschiedenen element-Paare im array. Dann müssen Sie verstehen, wie der rekursive Algorithmus wird angewendet, um die Durchführung dieses Konzepts. Es kann helfen, ziehen Sie aus der rekursions-Baum auf Papier bei jedem Schritt.
dies ist erschöpfend Rekursion und als Sazzad Hissain Khan sagte in seiner Antwort unter es ist der Kern der backtracking, cf Seite 2 see.stanford.edu/materials/icspacs106b/... backtracking verwendet wird, also eingeschränkte Vermehrung Probleme

InformationsquelleAutor Nemo | 2011-09-24

Schreibe einen Kommentar