НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

Программа решения задачи о ханойской башне (пример использования рекурсивной процедуры)

В одной из древних легенд говорится следующее. "В храме Бенареса находится бронзовая плита с тремя алмазными стержнями. На один из стержней бог при сотворении мира нанизал 64 диска разного диаметра из чистого золота так, что наибольший диск лежит на бронзовой плите, а остальные образуют пирамиду, сужающуюся кверху. Это - башня Брамы. Работая день и ночь, жрецы переносят диски с одного стержня на другой, следуя законам Брамы:

1) диски можно перемещать с одного стержня на другой только по одному;

2) нельзя класть больший диск на меньший.

Когда все 64 диска будут перенесены с одного стержня на другой, и башня, и храмы, и жрецы-брамины превратятся в прах и наступит конец света".

Эта древняя легенда породила задачу о Ханойской башне: переместить m дисков с одного из трех стержней на другой, соблюдая "законы Брамы".

Задача может быть решена одним перемещением только для одного (m = 1) диска, В общем случае потребуется 2m-1 перемещений.

Назовем стержни левым (LEFT), средним (MIDDLE) и правым (RIGHT). Задача состоит в переносе m дисков с левого стержня на правый (рис. 17).

Рис. 17
Рис. 17

Построим рекурсивное решение задачи, состоящее из трех этапов:

а) перенести башню, состоящую из (m - 1) диска, с левого стержня на средний (рис. 18):

Рис. 18
Рис. 18

б) перенести один оставшийся диск с левого стержня на правый (рис. 19):

Рис. 19
Рис. 19

в) перенести башню, состоящую из (m - 1) диска, со среднего стержня па правый (рис. 20):

Рис. 20
Рис. 20

Таким образом, задача о перемещении m дисков сводится к задаче о перемещении (m - 1) диска. Обращаясь опять к этому же алгоритму, сведем задачу к перемещению (m - 2) дисков. Продолжая этот процесс, получим в конце концов задачу о перемещении одного диска. Эта задача решается за один ход. Таким образом, в процессе решения возникают промежуточные задачи: переместить башню из нескольких (m) дисков с одного стержня на другой.

Обозначим тот стержень, с которого следует снять диски, через S1, на который надеть - через Sk, а вспомогательный стержень через Sw.

Оформим алгоритм решения задачи о переносе башни из m дисков с S1 на SR в виде процедуры MOVE с 4-мя параметрами: N, SI, SW, SK; алгоритм для п == 1 выделим в отдельную процедуру STEP, которая "перемещает" один диск со стержня S1 на SK.

Рис. 21
Рис. 21

Ниже приводится программа задачи о Ханойской башне и результат для перемещения 5 дисков.



Результат работы программы:



Итак, при решении поставленной задачи для пирамиды из пяти дисков необходимо произвести 31 перемещение. Это вселяет в нас оптимизм: жрецам придется долго трудиться, прежде чем "наступит конец света".

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь