Die Türme von Hanoi in PASCAL

Ein Beipiel für rekursive Prozeduren.


PROGRAM TuermeVonHanoi;
(* Gibt eine Sequenz von Zuegen an, um n Turmscheiben *)
(* gemaess den Regeln der Tuerme von Hanoi            *)
(* von Position 1 nach Position 3 zu bewegen.         *)

VAR n: INTEGER;
   
PROCEDURE Hanoi(n,i,j: INTEGER);
(* Gibt aus, wie n Scheiben von i nach j bewegt *)
(*  werden koennen, fuer i <> j in {1,2,3}.     *)
   VAR k: INTEGER;
   BEGIN
      IF n>0 THEN
	 BEGIN
            k := 6-i-j;   (* k in {1,2,3}-{i,j} *)
	    Hanoi(n-1,i,k);
	    WriteLn(i,' -> ',j);
	    Hanoi(n-1,k,j)
	 END; { IF }
   END; { Hanoi }

BEGIN
   Write('Gebe die Anzahl n der Scheiben ein, n = ');
   ReadLn(n);
   WriteLn;

   Hanoi(n,1,3)
END.