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

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

04.11.2015, 14:34. Показов 11595. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru