Совет 1 (общий)
MoveAll(k,from,to,tmp) MoveOne(from,to)
Первая из них выполняет шаги по переносу пирамиды из k дисков со шпильки from на шпильку to, используя в качестве рабочей шпильку tmp. Вторая переносит один диск со шпильки from на шпильку to.
Совет 2 (QBasic)
Совет 3 (Паскаль)
Программа 5_03.bas
DECLARE SUB MoveAll(k%,from$,to$,tmp$)
DECLARE SUB MoveOne(from$,to$)
CLS
INPUT "Введите количество дисков ",k%
MoveAll k%,"A","C","B"
END
SUB MoveAll (k%, from$, to$,tmp$)
IF k%=0 THEN EXIT SUB
MoveAll k%-l,from$,tmp$,to$
MoveOne from$,to$
MoveAll k%-l,trap$,to$,from$ END SUB
SUB MoveOne(from$,to$) STATIC
m%=m%+l
PRINT USING "#### : &--> & ";m%;from$;to$ END SUB
Программа 5_03.с
#include <stdio.h>
#include <conio.h>
void MoveAll(int k,char from,char to,char trap);
void MoveOne(char from,char to);
int m=0;
main () {
int k;
clrscr () ;
printf("\n Введите количество дисков - ");
scanf("Id",&k);
MoveAll(k,'A','C','B');
getch(); }
void MoveAll(int k,char from,char to,char tmp)
{
if(k==0) return; MoveAll(k-1,from,tmp,to);
MoveOne(from,to); MoveAll(k-1,tmp,to,from); }
void MoveOne(char from,char to) {
m++;
printf("\n%4d : %c --> %c",m,from,to); }
Программа 5_03.pas
program Hanoi; uses Crt; var
k:integer; const
m: integer=0;
procedure MoveOne(from,tol:char);
begin
inc (m) ;
writeln(m:4,from:2, ' —> ',tol);
end;
procedure MoveAll(k:integer;from,tol,tmp:char);
begin
if k = 0 then exit;
MoveAll(k-1,from,tmp,tol);
MoveOne(from,tol);
MoveAll(k-1,tmp,tol,from);
end;
begin
clrscr;
write('Введите количество дисков - ') ;
readln(k);
MoveAll(k, 'А', 'С', 'В');
readln;
end.