Форум программистов, компьютерный форум CyberForum.ru

Объяснить рекурсию (на примере ханойской башни) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Работа с массивами http://www.cyberforum.ru/cpp-beginners/thread207399.html
Определить значения и адреса элементов массива, вычисляемых по формуле X(катое)=a(катое)/k(факториал).
C++ Матрицы Помогите с программой: Дана квадратная матрица А порядка n. Найти А в четвертой степени http://www.cyberforum.ru/cpp-beginners/thread207390.html
C++ выводит неверный ответ
#include <iostream.h> #include <stdio.h> const int n = 100; int main (int argc, char * const argv) { int x; cout << "введите размер массива "; cin >> x; int mas;
Создать класс C++
Для соответствующего класса, перегрузить арифметические операции(+,-,*,/). При перезгузке арифметические действия должны выполняться относительно только числовых полей!!! Создать несколько объектов класса и проинициализировать их с помощью конструктора с параметрами. Создать несколько дополнительных объектов таким образом, чтобы: - первый объект являлся суммой двух других объектов; - второй...
C++ Абстрактные методы или указатели на функции? http://www.cyberforum.ru/cpp-beginners/thread207345.html
Сабж для класса систем дифференциальных уравнений вида y'=f(x,y) Что лучше: класс с полем указателя на вектор функцию и передача указателя в конструктор, или внутри класса абстрактный метод, а в программе его перекрывать? Оба метода работают. Но какой логичнее и/или лучше?
C++ Как поменять местами элементы вектора ? собственно вопрос совпадает с темой, как поменять местами 2 элемента вектора ? в C++ Добавлено через 25 минут все, не надо, сам разобрался. подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.12.2010, 11:02     Объяснить рекурсию (на примере ханойской башни)
KOPC1886,
А что по-подробнее-то? Ничего не считывается. Вот вы когда вызываете функцию, например, sqrt, в функции main, вы передаёте ей параметр - число. Оно копируется в собственную переменную функции sqrt, там с этой переменной происходят какие-то манипуляции и функция возвращает результат. Так вот тут то же самое, при вызове функции HanoiTowers ей передаются какие-то аргументы, они копируются в собственные переменные функции, она в свою очередь вызывает саму себя (теоретически), но фактически это уже другая функция с другими локальными параметрами, в которые и копируются значения тех параметров, которые этой новой функции передала вызывающая функция. Т.н. "обмен" происходит только потому, что сама вызывающая функция передаёт вызываемой свои же параметры, но в другом порядке. Т.е., например, у нас есть функция HanoiTowers(int n, int from, int buf, int to), и мы изначально вызвали HanoiTowers(10, 1, 2, 3), а она вызвала рекурсивно HanoiTowers(9, 1, 3, 2), т.е. в первой функции from был равен 1, buf - 2, to - 3, а в новой функции стало from - 1, buf - 3, to - 2, вот вам и весь "обмен". Я говорю "обмен" в кавычках, потому что обмена никакого нет, ведь вызванная функция просто получает в качестве параметров с теми же именами, что и вызывающая, перемешанные значения.

Не по теме:

Тьфу, спасибо случайно жамкнул)))

 
Текущее время: 12:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru