2016-06-14 16 views
0

Ich bin immer noch ein relativ neuer Programmierer, der versucht Rekursion zu verstehen. Ich habe über verschiedene Online-Tutorials nachgesehen, wie sie funktionieren und sie lassen es leicht verständlich erscheinen. Aber als ich auf diese Frage gestoßen bin, habe ich Probleme, zu versuchen, dem Programm zu folgen.Probleme beim Verständnis rekursiver Funktionen

#include <stdlib.h> 
#include <stdio.h> 

void hanoi(int n); 

int main (int argc, char *argv[]) { 
    hanoi(2); 
} 


void hanoi(int n) { 
    printf("\n\n--------!n-------: %d\n\n", n); 
    if (n > 0) { 
     hanoi (n - 1); 
     printf("\n\n--------#n---------: %d\n\n", n); 
     hanoi (n - 1); 
     printf("\n\n-------$n---------: %d\n\n", n); 
    } 
} 

Ausgang

!n: 2 

!n: 1 

!n: 0 

#n: 1 

!n: 0 

$n: 1 

#n: 2 

!n: 1 

!n: 0 

#n: 1 

!n: 0 

$n: 1 

$n: 2 

So, dass ich hoffte, dass jemand durch dieses Programm Schritt könnte und mir helfen, zu verstehen, wie Rekursion funktioniert wirklich.

Edit: -Sorry über die Fotos-

+2

Bitte bearbeiten Sie Ihre Frage und verwenden Sie keine Bilder für Codes. Füge Deine Codes zu Frage –

+0

ein Code nicht als Bilder posten. Erstellen Sie stattdessen eine Video-Komplettlösung und laden Sie sie auf Youtube hoch. Oh nein, warte. –

Antwort

0

Sie wollen n Blöcke von Pin 1 zu Pin bewegen 3.

Sie können dies tun, indem:

  1. alle bewegen, aber die unteren Block zu Pin 2. Dies erfordert mehrere Züge und entspricht dem Lösen von Hanois Tower für n-1 Blöcke, daher der Anruf an hanoi(n-1).

  2. Verschieben Sie den unteren Block zu Pin 3. Dies ist ein einziger Zug.

  3. Zuletzt die restlichen Blöcke von Pin 2 nach Pin 3 verschieben. Dies erfordert mehrere Züge und entspricht dem Lösen von Hanois Tower für n-1 Blöcke, daher der zweite Aufruf an hanoi(n-1).

Verwandte Themen