Hanoi tornyok rekurz\355v megold\341sHanoi tornyok probl\303\251m\303\241ja: adott h\303\241rom r\303\272d, az els\305\221n \303\241tm\303\251r\305\221 szerint rendezve korongok sorakoznak (a legnagyobb van legalul). Feladat, hogy a korongokat a harmadik r\303\272dra jutassuk \303\241t, ott az eredetivel megegyez\305\221 sorrendben legyenek, \303\251s a l\303\251p\303\251sek sor\303\241n korongot csak nagyobb \303\241tm\303\251r\305\221j\305\261 korongran lehet helyezni. K\303\266zben term\303\251szetesen haszn\303\241lhatjuk a m\303\241sodik rudat \303\241tmeneti t\303\241rol\303\241sra.
Ezt a probl\303\251m\303\241t oldja meg a k\303\266vetkez\305\221 proced\303\272ra, tetsz\305\221leges sz\303\241m\303\272 korong eset\303\251n. A megval\303\263s\303\255t\303\241s rek\303\272rz\303\255v, azaz a fut\303\241s sor\303\241n a f\303\274ggv\303\251ny \303\266nmag\303\241t h\303\255vja meg csak m\303\241s param\303\251terekkel. Az \303\266tlet annyi, hogy ha n korongot szeretn\303\251nk \303\241thelyezni az els\305\221 r\303\272dr\303\263l a harmadikra, akkor ehhez a fels\305\221 n-1 korongot kell \303\241thelyezni a m\303\241sodik r\303\272dra, k\303\266zben seg\303\255ts\303\251g\303\274l haszn\303\241lva a harmadik rudat (teh\303\241t megh\303\255vjuk a f\303\274ggv\303\251nyt eggyel kisebb korongsz\303\241mra \303\251s megfelel\305\221 r\303\272dsorrendre), majd a legnagyobb korongot \303\241trakjuk az els\305\221r\305\221l a harmadik r\303\272dra, v\303\251g\303\274l a m\303\241sodik r\303\272dr\303\263l mozgatjuk \303\241t az ott l\303\251v\305\221 n-1 korongot a harmadikra, \303\272gy, hogy k\303\266zben az els\305\221 rudat haszn\303\241ljuk t\303\241rol\303\241sra (ez egy \303\272jabb rek\303\272rz\303\255v h\303\255v\303\241st eredm\303\251nyez).restart;Hanoi := proc( n, f, t, r )
# n: a korongszam,
# f (from): honnan, t (to): hova akarjuk athelyezni a korongokat,
# r: az atmeneti tarolasra hasznalt segedrud,
if n>0 then
Hanoi( n-1, f, r, t );
printf("a(z) %d. korong: %c ==> %c\n", n, f, t);
# ez csak egy kiiratas, a %d helyere behelyettesitodik az n decimalis szam, a ket %c hely\351re pedig az f es a t karakterek kerulnek
Hanoi( n-1, r, t, f )
end if;
end proc;n:=3: f:="1": t:="3": r:="2":
Hanoi( n, f, t, r );