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

Базовые понятия о рекурсии - C++

Восстановить пароль Регистрация
 
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.06.2012, 03:43     Базовые понятия о рекурсии #1
Здравствуйте! Я на этом форуме новичок и не атк давно занимаюсь программированием на С++. И у меня возник такой вопрос.
В книге (Борис Пахомов "С\С++ и MS Visual Studio 2010 для начинающих") мимоходом проходится такое понятие, как рекурсивные функции.Я понял что это функции которые вызывают сами себя.Но как она работает?Каков принцип её работы?Вот что меня волнует. В качестве примера в книге дана код вычисления факториала числа:
C++
1
2
3
4
5
6
7
8
9
10
int fact(int i)
{
  if(i==0)
  return(i);
  else
  {
    i=i*fact(i-1);
    return(i);
  }
}
Обьясните пожалуйста!
Заранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.06.2012, 04:07     Базовые понятия о рекурсии #2
а что конкретно непонятного?
внутри функции можно вызывать любые другие функции, в том числе и саму себя.
в приведенном примере функция вызывается с аргументом i. если i отлично от нуля, происходит вызов этой же функции с аргументом i - 1.

факториал нуля вроде еденице равен. поэтому, если i == 0, нужно еденицу возвращать, а не i. Иначе результат вызова fact(n) всегда нуль будет возвращать.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.06.2012, 04:14  [ТС]     Базовые понятия о рекурсии #3
насчёт возврта единицы, если i==0, то согласен с Вами.Но мне непонятно, КАК может функция вызывать саму себя? WTF?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
24.06.2012, 04:32     Базовые понятия о рекурсии #4
Точно так же, как она может вызывать другие ункции.
Если посмотреть ассемблер, то в упрощенном варианте вызов функции - это выполнение кода начиная с какой-то метки. Имя функции - как раз такая метка. Так вот что мешает постоянно прыгать на одну и ту же метку и выполнять один и тот же код? Ничего не мешает.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
24.06.2012, 04:40  [ТС]     Базовые понятия о рекурсии #5
Спасибо большое! Наконец то понял, что к чему.Спасибо
Yandex
Объявления
24.06.2012, 04:40     Базовые понятия о рекурсии
Ответ Создать тему
Опции темы

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