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

Рекурсия - C++

Восстановить пароль Регистрация
 
Виталий5
 Аватар для Виталий5
6 / 6 / 1
Регистрация: 15.06.2013
Сообщений: 69
14.08.2013, 08:38     Рекурсия #1
Объясните пожалуйста как работает здесь рекурсия:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
void func(int num);
int main(void)
{
    func(5);
    return 0;
}
 
void func(int num)
{
    if(num)
        func(num-1);
    std::cout << num;
}
На выводе 012345.
0 понятно как получилось, почему потом число увеличивается на 1?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 08:38     Рекурсия
Посмотрите здесь:

РЕкурсия C++
Рекурсия (на С) C++
Рекурсия C++
рекурсия C++
Рекурсия C++
C++ Рекурсия
C++ Рекурсия
Рекурсия C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korvin_
 Аватар для korvin_
1325 / 1096 / 160
Регистрация: 28.04.2012
Сообщений: 3,923
14.08.2013, 09:00     Рекурсия #2
А ты подставь тело функции в вызов, чтобы получить последовательность операций:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func(5) {
  if (5) func(4) {
    if (4) func(3) {
      if (3) func(2) {
        if (2) func(1) {
          if (1) func(0) {
            if (0) ...; // false
            std::cout << 0;
          }
          std::cout << 1;
        }
        std::cout << 2;
      }
      std::cout << 3;
    }
    std::cout << 4;
  }
  std::cout << 5;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.08.2013, 09:37     Рекурсия #3
При каждом возврате из рекурсии извлекается то значение num, которое было при предыдущем заходе в функцию. В последнем заходе в функцию num стало равно 0, вывели, потом возврат в предыдущий заход в фуркцию, где num было 1, вывели, потом возврат в предыдущий заход, где num было 2 ... , потом возврат в первый заход в функцию, где num было 5, вывели.
Yandex
Объявления
14.08.2013, 09:37     Рекурсия
Ответ Создать тему
Опции темы

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