Hey,
ich bin grade dabei die Rekursion zu verstehen und habe folgendes Problem. Ich möchte bei meinem Programm "Hanoi", welches das Spiel "Die Türme von Hanoi" ausführt, die jeweils aktuellen Belegungszustände der 3 Stapel ausgeben. D.h. z.B. für 3 Scheiben:
Am Anfgang liegen alle alle 3 Scheiben auf dem Ausgangsstapel (1) --> Ausgabe: 1 1 1
Die oberste Scheibe wandert auf den Zielstapel (3) --> Ausgabe: 3 1 1
Die mittlere Scheibe wandert auf den Hilfsstapel (2) --> Ausgabe: 3 2 1
Die oberste Scheibe wandert vom Zielstapel (3) auf den Hilfsstapel (2) --> Ausgabe: 2 2 1
Die unterste Scheibe wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 2 2 3
Die oberste Scheibe wandert vom Hilfsstapel (1) auf den Ausgangsstapel (1) --> Ausgabe: 1 2 3
Die mittlere Scheibe wandert vom Hilfsstapel (2) auf den Zielstapel (3) --> Ausgabe: 1 3 3
Die oberste Scheine wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 3 3 3
"2 2 1" bedeutet also: Die oberste Scheibe befindet sich auf Stapel 2, die mittlere Scheibe befindet sich auf Stapel 2, die unterste Scheibe befindet sich auf Stapel 1
Es soll also bei jeder beliebigen Anzahl von Scheiben (n) immer von 111 nach 333 gehen.
Ich habe es schon mit switch und if-Abfragen probiert, bekomme es aber höchstens so hin, dass nur der aktuelle Zustand von der Scheibe ausgeben wird, die sich zuletzt bewegt hat.
Wäre schön. wenn jemand einen Tipp für mich hat :roll:
Danke, Susi
ich bin grade dabei die Rekursion zu verstehen und habe folgendes Problem. Ich möchte bei meinem Programm "Hanoi", welches das Spiel "Die Türme von Hanoi" ausführt, die jeweils aktuellen Belegungszustände der 3 Stapel ausgeben. D.h. z.B. für 3 Scheiben:
Am Anfgang liegen alle alle 3 Scheiben auf dem Ausgangsstapel (1) --> Ausgabe: 1 1 1
Die oberste Scheibe wandert auf den Zielstapel (3) --> Ausgabe: 3 1 1
Die mittlere Scheibe wandert auf den Hilfsstapel (2) --> Ausgabe: 3 2 1
Die oberste Scheibe wandert vom Zielstapel (3) auf den Hilfsstapel (2) --> Ausgabe: 2 2 1
Die unterste Scheibe wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 2 2 3
Die oberste Scheibe wandert vom Hilfsstapel (1) auf den Ausgangsstapel (1) --> Ausgabe: 1 2 3
Die mittlere Scheibe wandert vom Hilfsstapel (2) auf den Zielstapel (3) --> Ausgabe: 1 3 3
Die oberste Scheine wandert vom Ausgangsstapel (1) auf den Zielstapel (3) --> Ausgabe: 3 3 3
"2 2 1" bedeutet also: Die oberste Scheibe befindet sich auf Stapel 2, die mittlere Scheibe befindet sich auf Stapel 2, die unterste Scheibe befindet sich auf Stapel 1
Es soll also bei jeder beliebigen Anzahl von Scheiben (n) immer von 111 nach 333 gehen.
Ich habe es schon mit switch und if-Abfragen probiert, bekomme es aber höchstens so hin, dass nur der aktuelle Zustand von der Scheibe ausgeben wird, die sich zuletzt bewegt hat.
Wäre schön. wenn jemand einen Tipp für mich hat :roll:
Danke, Susi
Code:
public class Hanoi {
void zieheScheibe(char Ausgang, char Ziel) {
System.out.println("Bewege Scheibe von " +Ausgang+ " nach " +Ziel);
}
void Hanoi(int n, char X, char Y, char Z) {
if(n==1) {
zieheScheibe(X,Z);
}
else {
Hanoi(n-1,X,Z,Y);
//Stapel der Höhe n-1 von X nach Y mit Zwischenablage Z
zieheScheibe(X,Z);
Hanoi(n-1,Y,X,Z);
//Stapel der Höhe n-1 von Y nach Z mit Zwischenablage X
}
}
}
class HanoiApplication {
public static void main (String[] args) {
char A = 'A', B = 'B', C = 'C';
int n = 3; //3 Scheiben
Hanoi th = new Hanoi();
th.Hanoi(n,A,B,C);
}
}