Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Хaнойские Башни.docx
Скачиваний:
52
Добавлен:
21.05.2015
Размер:
226.03 Кб
Скачать

Алгоритм решения задачи

Минимальное число ходов, необходимое для решения головоломки, равно 2n - 1, где т — число дисков.

Начнём с самого маленького кольца и переложим его на любую отметку. В дальнейшем это кольцо нужно перемещать в том же направлении, что и при первом перекладывании. Затем произведем единственно возможное перемещение оставшихся колец, после чего снова переложим самое маленькое кольцо и т. д.

Рекурсивный алгоритм решения задачи

В программировании рекурсия — вызов функции из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция вызывает функцию , а функция  — функцию . Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. Рекурсивная программа позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причём без явных повторений частей программы и использования циклов.

Структурно рекурсивная функция на верхнем уровне всегда представляет

собой команду ветвления (выбор одной из двух или более альтернатив в

зависимости от условия (условий), которое в данном случае уместно назвать

«условием прекращения рекурсии»), имеющей две или более альтернативные

ветви, из которых хотя бы одна являетсярекурсивной и хотя бы одна —

 терминальной. Рекурсивная ветвь выполняется, когда условие прекращ

ения рекурсии ложно, и содержит хотя бы один рекурсивный вызов —

прямой или опосредованный вызов функцией самой себя. Терминальная

ветвь выполняется, когда условие прекращения рекурсии истинно; она

возвращает некоторое значение, не выполняя рекурсивного вызова.

Правильно написанная рекурсивная функция должна гарантировать, что

через конечное число рекурсивных вызовов будет достигнуто выполнение

условия прекращения рекурсии, в результате чего цепочка последовательных

рекурсивных вызовов прервётся и выполнится возврат.

Помимо функций, выполняющих один рекурсивный вызов в каждой

рекурсивной ветви, бывают случаи «параллельной рекурсии», когда на одной

рекурсивной ветви делается два или более рекурсивных вызова.

Параллельная рекурсия типична при обработке сложных структур данных,

таких как деревья. Простейший пример параллельно-рекурсивной

функции — вычисление ряда Фибоначчи, где для получения значения n-го

члена необходимо вычислить (n-1)-й и (n-2)-й.

Описание программ

4.1 Функциональное назначение

Данные программы предназначены для нахождения решения задачи о ханойских башнях.

4.2 Директивы предпроцессора и константы

Директива #include указывает препроцессору, что нужно обработать содержимое указанного файла, если эти содержимое отображалось в программе- источник в точке отображения директивы.* (http://msdn.microsoft.com/ru-ru/library/36k2cdd4.aspx)

#include <iostream> - это заголовочный файл включающий классы, функции и переменные для организации ввода и вывода в С++.

CH – число колец;

N – начальное положение колец;

K- конечное положения колец;

PR – промежуточный колышек;

Руководство пользователя

Запускаемым файлом программы является файл башня.exe.

После запуска первой программы нахождения решения задачи о ханойских башнях на экране появляется главное окно программы, представленное на рисунке 1.

Рисунок 1 – Главное окно программы «1 Нахождение решения задачи о восьми ферзях»

Далее вводим исходный колышек

Рисунок 2 – ввод главного колышка

После вводим конечный колышек

Рисунок 3 – ввод конечного колышка.

После вводим «промежуточное хранилище»

Рисунок 4 – ввод «промежуточного хранилища»

И в конце вводим количество дисков

Рисунок 5 – ввод количества дисков

В результате получаем решение

Рисунок 7 – решение задачи о ханойских башнях