Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
renu
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 2
#1

Пояснение рекурсии в Ханойских башнях - C++

26.12.2013, 08:20. Просмотров 395. Ответов 3
Метки нет (Все метки)

Ребята, нашел рекурсивное решение про задачу с Ханойскими башнями, но хоть убейте не могу понять (найти):
Почему получаются такие значения.
Если про первые четыре более-менее понятно, то как получились обратные 2 --> 1 2 --> 3 не понимаю
Не судите строго, поясните пож-та.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream.h>
#include <iomanip.h>
 
void Towers (int, int, int, int);
 
int main(){
 
int quality = 3, one = 1, two = 2, three = 3;
 
Towers (quality, one, three, two);
 
return 0;
}
 
void Towers (int number, int fst, int thr, int snd)
{
      if (number != 0)
      {
        Towers (number-1, fst, snd, thr); 
        cout << fst << " --> " << thr << endl;
        Towers (number-1, snd, thr, fst);
      }
}
Результат:
1 --> 3
1 --> 2
3 --> 2
1 --> 3
2 --> 1
2 --> 3
1 --> 3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2013, 08:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пояснение рекурсии в Ханойских башнях (C++):

Дайте пояснение о рекурсии функции - C++
Если не ошибаюсь, в Паскале, функция или процедура не может вызывать саму себя. Объясните суть процесса в Си++ - функция опирается на...

Небольшое пояснение - C++
Здравствуйте,хотел бы поинтересоваться.Вот я,планирую начать изучать с++,хотелось бы иметь примерное представление о том что такое...

Пояснение к коду - C++
Добрый день! Вопрос в следующем, есть конструктор объявленный в хелпе: virtual __fastcall TGIS_LayerSHP(); Я не понимаю...

Пояснение функции - C++
Пожалуйста объясните что делает функция, если можно с пояснением знака -&gt;, про указатели я знаю. void List::addElem2(int qt, int...

Пояснение typedef - C++
typedef bool (*comparator)(void* fisrt, void* second); что делает *comparator, и что это вобще ?

Пояснение к функциям - C++
Есть 2 функции. Не могли бы вы прокомментировать их. Или подробно описать что они делают. Заранее спасибо.bool MEqualsSth(void* first,...

3
Людвиг Бодмер
350 / 349 / 136
Регистрация: 29.03.2013
Сообщений: 862
Завершенные тесты: 4
26.12.2013, 10:46 #2
renu, а вы с какой средой разработки работаете? В Visual Studio под отладчиком пошагово можно пройти и посмотреть как меняются переменные. Вот например, если про первые 4 результата понятно то вот в картинках момент между выводом четвертого и пятого результатов(внизу окно "Локальные переменные"):
1
Миниатюры
Пояснение рекурсии в Ханойских башнях   Пояснение рекурсии в Ханойских башнях   Пояснение рекурсии в Ханойских башнях  

Пояснение рекурсии в Ханойских башнях   Пояснение рекурсии в Ханойских башнях   Пояснение рекурсии в Ханойских башнях  

Пояснение рекурсии в Ханойских башнях   Пояснение рекурсии в Ханойских башнях  
renu
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 2
26.12.2013, 19:03  [ТС] #3
Спасибо!
Но меня картинки еще больше запутали, если честно.

Как я вижу, что

Первоначально задаются числа 1-3-2 и потом они присваиваются переменным fst, snd, thr в заданной последовательности и выводится результат fst --> thr

при n = 3
Towers (int number, int fst, int thr, int snd) fst = 1, thr = 3,
при n = 2
Towers (number-1, fst, snd, thr) fst = 1, thr = 2 (такой картинки у Вас нет)
Towers (number-1, snd, thr, fst) fst = 2, thr = 3
при n = 1
Towers (int number, int fst, int thr, int snd) fst = 1, thr = 3,

А как получились в обратную сторону?
fst = 2 --> thr = 1
fst = 3 --> thr = 2
0
Людвиг Бодмер
350 / 349 / 136
Регистрация: 29.03.2013
Сообщений: 862
Завершенные тесты: 4
27.12.2013, 10:36 #4
renu, у вас напутано даже про первые четыре действия. У меня на картинках показан не весь процесс, а только один этап между выводом 1-->3 и 2-->1. Возможно лучше будет объяснить по-другому, представьте эти башни со снимающимися кольцами, вот так будет это выглядеть:
0
Миниатюры
Пояснение рекурсии в Ханойских башнях  
27.12.2013, 10:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2013, 10:36
Привет! Вот еще темы с ответами:

Пояснение по синтаксису - C++
только не надо гнать в гугл, я не могу там найти, т.к. не могу правильно сформировать запрос... Код: //======================== ...

Граммотное пояснение. - C++
Здравствуйте форумчане! Помогите пожалуйста грамотно (!) объяснить действия выполняющиеся в этом куске программы. { int max = 1;...

Пояснение структуры ORDER - C++
Народ помогите разобраться, код мне помогли накалякать с этого форума вот и некоторые непонятные строки есть, и выдает ваще какую то фигню,...

Нужно пояснение кода - C++
Не могу понять 2 части кода. Разъясните , пожалуйста). 1) cube ( nums , 10 ) . Для чего 10? Откуда она? Для чего nums там? 2) Не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru