hanoi Rekursion
-
void trageScheibe(char saeuleVon, char saeuleNach) { printf(" Trage eine Scheibe von Turm %c nach Turm %c\n", saeuleVon, saeuleNach); } void bewegeTurm(int scheiben, /* Anzahl der Scheiben */ char saeuleVon, /* von Saeule */ char saeuleNach, /* nach Saeule */ char saeuleVia) /* ueber Saeule */ { if(scheiben==1)trageScheibe( saeuleVon,saeuleNach); else{ bewegeTurm( scheiben-1,saeuleVon,saeuleVia,saeuleNach); trageScheibe( saeuleVon,saeuleNach); bewegeTurm(scheiben-1, saeuleVia,saeuleNach,saeuleVon); } }Kann mir mal einer erklären wie der hanoi Algorithmus für
2 Scheiben funktioniert ?
-
main fehlt noch

void main( void) { int scheibenZahl; printf("Geben Sie die Anzahl der Scheiben ein: "); scanf("%d", &scheibenZahl); bewegeTurm(scheibenZahl, 'A', 'B', 'C'); }
-
blurry33 schrieb:
Kann mir mal einer erklären wie der hanoi Algorithmus für
2 Scheiben funktioniert ?Ist das ein Scherz?
Von Säule 1 zu Säule 2: Säule: 1 2 3 Schritt 1: AB Schritt 2: A B Schritt 3: A B Schritt 4: AB
-
nee kein Scherz.
Ich komm mal wieder mit der Rekursion nicht zurecht.
-
naja ok hab meinen Fehler entdeckt

-
was mir jetzt erst auffällt
1. bewegeTurm( scheiben-1,saeuleVon,saeuleVia,saeuleNach); 2. trageScheibe( saeuleVon,saeuleNach); 3. bewegeTurm(scheiben-1, saeuleVia,saeuleNach,saeuleVon);Wenn der Prozessor die Funktionen auf den stack legt muss er erst die
3 und dann die 2. drauflegen. Würde die 3. ganz oben liegen wäre die
Reihenfolge ja falsch. Er muss aber immer erst die 2. und dann die 3 abarbeiten.Wenn man sich das selber auf papier zu erklären versucht neigt man
ja dazu von oben nach unten einfach abzuschreiben. Und rollt man das ganze
dann von hinten auf , wäre das falsch .Danke !