001    package de.hska.info1.rekursion;
002    
003    /**
004     * Klassische, rekursive Lösung zum Geduldsspiel Türme von Hanoi.
005     * 
006     * @author Christian Pape
007     */
008    public class TuermeVonHanoi {
009    
010            /**
011             * Gibt die Zugreihenfolge für das Spiel Türme von 
012             * Hanoi aus. 
013             * @param n    Grösse der Pyramide (Anzahl Scheiben)
014             * @param von  Stab, auf dem sich die Pyramide befindet
015             * @param nach Stab, zu dem die Pyramide verschoben werden soll
016             * @param frei Stab, der zur temporären Ablage von Scheiben dient
017             */
018            public void hanoi(int n, int von, int nach, int frei) {
019                    if (n == 1) {
020                            System.out.println(von + " -> " + nach);
021                    } else {
022                            hanoi(n-1, von, frei, nach);
023                            System.out.println(von + " -> " + nach);
024                            hanoi(n-1, frei, nach, von);
025                    }
026            }
027            
028            /**
029             * Identisch zu {@link #hanoi(int, int, int, int)}.
030             * Der Rekursionsabbruch wurde lediglich verbessert.
031             */
032            public void hanoi1(int n, int von, int nach, int frei) {
033                    if (n >= 1) {
034                            hanoi1(n-1, von, frei, nach);
035                            System.out.println(von + " -> " + nach);
036                            hanoi1(n-1, frei, nach, von);
037                    }
038            }
039            public static void main(String [] argv) {
040                    TuermeVonHanoi tuermeVonHanoi = new TuermeVonHanoi();
041                    
042                    tuermeVonHanoi.hanoi(4, 1, 2, 3);
043            }
044    }