Die (legendären) Türme von Hanoi bestehen aus durchbohrten Scheiben, die der Größe nach auf Säulen geschlichtet sind. Auf einer Säule befinden sich Scheiben - sie sollen Stück für Stück auf eine andere Säule umgeschlichtet werden, wobei eine Scheibe immer nur auf einer größeren zu liegen kommen soll. Damit dies möglich ist, können Scheiben zwischenzeitlich auf einer dritten Säule gestapelt werden... Im folgenden Beispiel wird das Umschlichten der Scheiben rekursiv berechnet und Schritt für Schritt ausgegeben:
public class Hanoi { static long schritte; static void lege(int n, char von, char nach, char zwischen) { if (n>0) { lege(n-1, von, zwischen, nach); System.out.println(n + ". Scheibe von " + von + " nach " + nach); lege(n-1,zwischen, nach, von); schritte++; } } public static void main(String [] args) { int maxzahl = Integer.parseInt(args[0]); lege(maxzahl, 'a', 'c', 'b'); System.out.println("-----------------------------------------"); System.out.println(schritte + " Schritte"); } }
Für einige (kleine) Anzahl von Scheiben erhalten wir:
alfred@duron:~/java/themen> java Hanoi 2 1. Scheibe von a nach b 2. Scheibe von a nach c 1. Scheibe von b nach c ----------------------------------------- 3 Schritte alfred@duron:~/java/themen> java Hanoi 3 1. Scheibe von a nach c 2. Scheibe von a nach b 1. Scheibe von c nach b 3. Scheibe von a nach c 1. Scheibe von b nach a 2. Scheibe von b nach c 1. Scheibe von a nach c ----------------------------------------- 7 Schritte alfred@duron:~/java/themen> java Hanoi 4 1. Scheibe von a nach b 2. Scheibe von a nach c 1. Scheibe von b nach c 3. Scheibe von a nach b 1. Scheibe von c nach a 2. Scheibe von c nach b 1. Scheibe von a nach b 4. Scheibe von a nach c 1. Scheibe von b nach c 2. Scheibe von b nach a 1. Scheibe von c nach a 3. Scheibe von b nach c 1. Scheibe von a nach b 2. Scheibe von a nach c 1. Scheibe von b nach c ----------------------------------------- 15 Schritte alfred@duron:~/java/themen>
Man kann zeigen, dass für Scheiben Schritte notwendig sind. Wieviele Schritte sind zum Umsetzen von Scheiben notwendig? Wie lange dauert dafür die Berechnung?