Есть три стержня A, B, и C. На стержень A надето N дисков, наверху самый маленький, каждый следующий диск больше предыдущего, а внизу самый большой. На другие стержни дисков не надето. Hеобходимо перенести диски со стержня A на стержень C, пользуясь стержнем B, как вспомогательным, так, чтобы диски на стержне C располагались в том же порядке, в каком они располагаются на диске A перед перемещением.
При перемещении никогда нельзя класть больший диск на меньший.
Рекурсивный метод
Для того, чтобы переложить всю пирамиду, надо сначала переложить все, что выше самого большого диска, с первого на вспомогательный стержень, потом переложить это самое большой диск с первого на третий стержень, а потом переложить оставшуюся пирамиду со второго на третий стержень, пользуясь первым стержнем, как вспомогательным.
/*
данная процедура переносит N дисков со стержня A на стержень C
пользуясь B как вспомогательным, соблюдая правила
*/
процедура "Перенести" (A, B, C, N)
начало
если N=1
// Если диск всего один, то надо его перенести напрямую
то
снять диск со стержня A и положить на стержень C;
возврат из процедуры;
иначе
// Переносим все диски, кроме самого большога со стежня
// A на стержень B
Перенести (A,C,B,N-1);
// Переносим самый большой диск со стержня A на стержень C
снять диск со стержня A и положить на стержень C;
// Переносим все диски со стержня B на стержень C поверх
// самого большого диска
Перенести (B,A,C,N-1);
возврат из процедуры;
конец если;
конец процедуры "Перенести";
procedure Solve(n: integer; a,b,c: Char);
begin
if n > 0 then
begin
Solve(n-1, a, c, b);
Writeln('Переместить диск со стержня ', a, ' на стержень ',b);