Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия, Объясните работу кода 
V
    Опции темы
heforma
Дата 24.9.2011, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.8.2011

Репутация: нет
Всего: нет



Здравствуйте! Объясните пожалуйста как работает данный код:
Код

#include <iostream>
using namespace std;
int rec(int dig,int dig2)
{
    if(dig2<1) return 0;
    return dig+rec(dig,dig2-1);
}
void main()
{
    int dig,dig2;
    cout<<"Enter a first digit: ";
    cin>>dig;
    cout<<"Endter a second digit: ";
    cin>>dig2;
    cout<<rec(dig,dig2)<<endl;

}

Насколько я понимаю он добавляет к переменной dig её саму n-ное количество раз.
Я не понимаю почему программа решает добавить к dig именно dig, а не измененное dig2.
И ещё, задачи решаемые рекурсивно, теоретически решаются итеративно, а наоборот верно? 
Помогите пожалуйста понять рекурсию =))

Это сообщение отредактировал(а) heforma - 24.9.2011, 20:24
PM MAIL   Вверх
newbee
Дата 24.9.2011, 23:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 3
Всего: 19



Цитата(heforma @  24.9.2011,  21:01 Найти цитируемый пост)
Насколько я понимаю он добавляет к переменной dig её саму n-ное количество раз.
Да

Цитата(heforma @  24.9.2011,  21:01 Найти цитируемый пост)
Я не понимаю почему программа решает добавить к dig именно dig, а не измененное dig2.
Потому что в програме написано return dig+rec(dig...

Цитата(heforma @  24.9.2011,  21:01 Найти цитируемый пост)
И ещё, задачи решаемые рекурсивно, теоретически решаются итеративно, а наоборот верно? 
Любую рекурсию можно обратить в итерацию и наоборот. В конечном счете любую программу теоретически можно решить одним большим циклом и множеством флагов/условий.

Цитата(heforma @  24.9.2011,  21:01 Найти цитируемый пост)
Помогите пожалуйста понять рекурсию =))
Это очень просто, если язык располагает к рекурсии. Читай SICP.



--------------------
You're face to face
With man who sold the world
PM   Вверх
bsa
Дата 25.9.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(heforma @  24.9.2011,  20:01 Найти цитируемый пост)
Помогите пожалуйста понять рекурсию =))

А что ее понимать? В твоем случае надо просто "развернуть" рекурсивные вызовы в линейную программу. И все станет понятно. 
PM   Вверх
heforma
Дата 26.9.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 9.8.2011

Репутация: нет
Всего: нет



Спасибо всем =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.