Wpis z mikrobloga

Napisz procedurę Hanoibezk(n,k:Integer), która dokona przeniesienia wszystkich krążków poza krążkiem o numerze k z wieży o numerze 1 na wieżę o numerze 3 w postaci wypisania ciągu pojedynczych ruchów. Każdy ruch powinien mieć postać wypisania na standardowe wyjście komunikatu „przenieś krążek j z wieży s na wieżę d” dla pewnych j,s,d takich, że 1<=j<=n, 1<=s<=3, 1<=d<=3. Zadbaj o wykonanie możliwie małej liczby kroków. Załóż, że n>=1 oraz że 1<=k<=n.

Jakieś pomysły? Jak zrobić rekurencyjnie bez podawania w argumencie skąd/dokąd i jak pominąć ten krążek "k"?
#programowanie
  • 6
@wytrzzeszcz: Ok, ale zauważ, że standardowy algorytm wygląda mniej więcej tak (tak, pascal..)

PROCEDURE dohanoi(N, Tfrom, Tto, Tusing : integer);
BEGIN
if N > 0 THEN
BEGIN
dohanoi(N-1, Tfrom, Tusing, Tto);
writeln('move ', Tfrom:1, ' --> ', Tto:1);
dohanoi(N-1, Tusing, Tto, Tfrom);
END
END;

W argumentach podaje "from" i "to", dlatego działa fajnie rekurencyjnie. Jak to ominąc, żeby mieć tylko:
Hanoibezk(n,k:Integer)?

Nie mogę raczej trzymać niczego poza funkcją, typu zmienna globalna.