Türme von Hanoi rekursiv in Java?

2 Antworten

Das mag Dir deutlicher werden, wenn Du den Ablauf (bei gleicher Funktion) änderst:

if (n > 1)
        bewege(a, c, b, n-1);
System.out.println("Lege die oberste Scheibe von " + 
       "Turm " + a + " auf Turm " + c + ".");
if (n > 1)
        bewege(b, a, c, n-1);

Eine typische Situation, die zeigt, weshalb man sich über die Namensgebung von Variablen und Methoden Gedanken machen muss:

statt

void bewege (char a, char b, char c, int n)

sollte es besser heißen:

void TransportiereTurm(
String von, 
String zwischenablage, 
String nach, 
int derHoehe)
...

So sollte das ganze leicht deutlich werden.

Folgendes:

bewege(a,c,b,n-1) Die Methode ruft sich selbst mit einer kleineren größe auf.

Im Endeffekt verschiebt sie Deinen Hanoi-Turm außer der untersten platte auf den Stapel b.

bewege(a,b,c,1) Es wird die unterste Platte von a nach c bewegt. Da du davor je alles außer der untersten Platte auf Stapel b gelegt hast ist dies auch möglich.

bewege(b,a,c,n-1) Bewegt den zuvor auf Stapel b gelegten Turm auf die unterste Platte auf Stapel c.

Am Besten spielst du das mal an ein paar Beispielen durch, dann verstehst du es hoffentlich...