Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.53/55: Рейтинг темы: голосов - 55, средняя оценка - 4.53
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784

Ханойская башня и "любимая" рекурсия

04.11.2015, 14:34. Показов 11658. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Нашёл здесь на форуме код, для решения данной задачи, но самому мало понятно, что и как, может кто подробно разъяснить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void Hanoi(int r, int b, int e)
{
    int c; // как я понял, колышек для временного размещения колец.
 
    // Находим колышек, на котором будут временно расположены кольца.
    if ((b == 1 && e == 2) || (b == 2 && e == 1)) c = 3;
    else
        if ((b == 1 && e == 3) || (b == 3 && e == 1)) c = 2;
        else
            if ((b == 2 && e == 3) || (b == 3 && e == 2)) c = 1;
 
    // пока r > 1 идёт рекурсия.
    if (r > 1)
    {
        // а вот этот блок я вообще не могу понять...
        Hanoi(r - 1, b, c);
        std::cout << b << " -> " << e << std::endl;
        Hanoi(r - 1, c, e);
    }
    // основной случай, рекурсии кердык.
    else
        std::cout << b << " -> " << e << std::endl;
}
 
int main()
{
    int _rings;
 
    std::cout << "Type number of rings: ";
    std::cin >> _rings;
 
    Hanoi(_rings, 1, 3);
 
    system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2015, 14:34
Ответы с готовыми решениями:

Ханойская башня. Рекурсия
Здравствуйте. Это одно из решений о ханойской башне. Я не могу понять область действия переменных в шаге рекурсии, когда переменные...

Ханойская башня(Рекурсия)
Здравствуйте. Нашел готовое решение задачи на этом сайте с тем условием, что диски будут перемещаться с 1 столба на 3, используя при этом 2...

Рекурсия и Ханойская башня, нужны комментарии
Добрый вечере есть программа. И мне нужно разобраться полностью: что и за что отвечает и как это называется, почему оно здесь и с чем...

28
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
04.11.2015, 18:32  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _Ivana Посмотреть сообщение
Давай, пока горячо - лепи сюда рекурсивный факториал, раз ты его разобрал. И подкрути вывод аргумента.
Ну разобрать то разобрал, правда давненько это было
Чуть позже отпишу.

Добавлено через 10 минут
_Ivana, оно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int fact(int n)
{
    if (n <= 1)
        return 1;
    else
        cout << n << endl;
        return n * fact(n - 1);
        
}
 
int main()
{
    int number = 5;
 
    cout << fact(number) << endl;
 
    system("pause");
}
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
04.11.2015, 18:33
Оно. Видишь что выводит? А теперь сделай в ветке иначе сначала расчет результата в переменную, потом вывод аргумента, а потом возврат результата.
0
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
04.11.2015, 18:36  [ТС]
Я просто помню, как это делается, даже в тетради схемку делал, но вот так, с ходу в уме представить в уме, что там происходит не получается.

Добавлено через 1 минуту
Забыл скобки поставить, а вывод вроде нормальный..
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
04.11.2015, 18:38
А теперь сделай свой факториал void и ничего не возвращай, а вывод аргумента оставь. И с Фибоначчами так тоже попробуй - будет еще интереснее. И до ханойских башен останется полшага.
0
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
04.11.2015, 18:51  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
А теперь сделай в ветке иначе сначала расчет результата в переменную, потом вывод аргумента, а потом возврат результата.
C++
1
2
3
4
5
6
7
8
9
10
11
int fact(int n)
{
    if (n <= 1)
        return 1;
    else
    {
        x = n * fact(n - 1);
        cout << "Arg: " << n << endl;
        return n * fact(n - 1);
    }
}
Где-то накосячил или не так Вас понял. Вывод кривой.
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
04.11.2015, 18:53
Ну почему же кривой - ровно как и заказывал. И это кстати очень похоже на твои башни - вызов / вывод / вызов. Хотя я имел в виду конечно один вызов до вывода.
0
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
04.11.2015, 18:59  [ТС]
Вообще бред какой-то написал...

Добавлено через 20 секунд
Сейчас подробнее разберу вывод..

Добавлено через 4 минуты
Цитата Сообщение от _Ivana Посмотреть сообщение
Хотя я имел в виду конечно один вызов до вывода.
А не подскажете как реализуется только лишь один вызов?
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
04.11.2015, 19:02
Ну ты х зачем считал? Причем как глобальную переменную, которая уже объявлена и типизирована выше, но это детали. Локальной ее сделай и возвращай после цаута.
0
 Аватар для kalonord
28 / 28 / 5
Регистрация: 27.01.2014
Сообщений: 784
04.11.2015, 19:11  [ТС]
Цитата Сообщение от _Ivana Посмотреть сообщение
Локальной ее сделай и возвращай после цаута.
C++
1
2
3
4
5
6
7
8
 else
    {
        cout << "Arg: " << n << endl;
 
        int x = n * fact(n - 1);
 
        return n * fact(n - 1);
    }
Правильно? Если нет, извините, я просто таким родился
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.11.2015, 19:11

Рекурсия (нужны комментарии) "Ханойская башня"
Помогите пожалуйста, обьясните написание программы, какие переменные и зачем используются, буду очень благодарна)) #include...

Ханойская башня
Имеются N дисков различного диаметра и три штыря Заранее благодарен за всевозможные решения:) П.5.18.Правил Запрещено размещать...

Ханойская башня
Все вы видели башню Ханоя(если нет, то есть в гугл :D ) . У вас есть 3 столпа «а», «б» и «с», и вам нужно перенести все диски с одного...

Ханойская башня
Здравтвуйте! Нужно решить задачу где на вход дано Н стержней и К дисков и еще известны начальная и конечная конфигурации(где какие диски...

Ханойская башня
Здравствуйте! Скажите пожалуйста как можно реализовать решение для ханойской башни, где я ввожу количество колец и столбиков? Суть я...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru