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 }