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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Владимир848484
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 5
#1

Обьясните рекурсию на пальцах - C++

05.06.2016, 15:53. Просмотров 237. Ответов 5
Метки нет (Все метки)

Привет всем!
Классическая задача на рекурсию с факториалом.
#include <conio.h>

long int factorial(long int n)
{
if (n == 0 || n == 1) return 1;
return n * factorial(n - 1);
}
Допустим n равно 7.Понятно что функция будет рекурсивно себя вызывать уменьшая за каждый вызов n на 1.Доходим до вызова с числом n равным 1. Выполняется условие на равенство 1 и функция возвращает 1 в main.В этом вызове мы не доходим до рекурсивного вызова.Так почему тогда происходит рекурсивный подьем после достижения n=1?Ведь после этого функция должна вернуть 1 и передать управление в функцию main cледующей команде после вызова функции factorial?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 15:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обьясните рекурсию на пальцах (C++):

Поясните на пальцах) - C++
Зачем выделять память под массив?И зачем ставить 2 звездочки перед переменной?

Расскажите на пальцах про классы - C++
Доброе время суток! (сразу оговорюсь, можете кинуть ссылкой куда мне пойти почитать) Сижу разбираюсь в классах и собственно вопросы:...

Расскажите на пальцах Что это за зверь - C++
Доброе время суток! Тут по неволе пришлось заглянуть в WINAPI это ппц, ну не об этом. Расскажите кто нить что такое AnsiString,...

Указатели "на пальцах" и ошибка в VS2015 - C++
дошел до темы указателей, прочитал кучу разных источников, теория понятна, но нет понимания с &quot;физической&quot; точки зрения - что это, в каком...

Обьясните. - C++
Прошу помощи. Расскажите пожалуйста по пунктам где и что делает программа, что за функция.Заранее благодарен. #include &lt;stdio.h&gt; int...

обьясните условие - C++
минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы. например 1 2 3 4 5 6 7 8 9 побочная...

5
avgoor
915 / 550 / 119
Регистрация: 05.12.2015
Сообщений: 1,531
05.06.2016, 16:00 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Владимир848484 Посмотреть сообщение
функция должна вернуть 1 и передать управление в функцию main
Должна вернуть 1 не в main, а в то место, откуда она вызвана, т.е. в factorial(2), он вернет 2*1 в factorial(3) и т.д.
1
S_el
2106 / 1625 / 308
Регистрация: 15.12.2013
Сообщений: 6,485
05.06.2016, 16:01 #3
Владимир848484, привет. Может-быть поможет:
Рекурсивный метод. Принцип работа
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 16:01 #4
Цитата Сообщение от Владимир848484 Посмотреть сообщение
Доходим до вызова с числом n равным 1. Выполняется условие на равенство 1 и функция возвращает 1 в main.
Из main вызывается функция с числом 7. А функция с числом 1 вызывается из функции с числом 2, и в нее возвращает результат.
0
vadim_bz
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
05.06.2016, 16:03 #5
После достижения n == 1 функция не сразу возвращается в main, а происходит возврат этой 1 в предыдущий шаг рекурсии, где в свою очередь происходит перемножение с текущим n и так до самого первого шага рекурсии и уже итоговый результат возвращается в main.
0
Владимир848484
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 5
05.06.2016, 16:10  [ТС] #6
Cпасибо! Теперь все как по полочкам)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2016, 16:10
Привет! Вот еще темы с ответами:

Обьясните проограмму - C++
Объясните , пожалуйста, подробно каждую строчку. Спасибо. Сама задачка звучит так. Определить разность между наиб. и наим числом...

обьясните задание - C++
Захватить память для массива из 10 структур Заполните массив данными из файла &quot;2.dat&quot;. Вывести информацию о маршрутах, имеющих...

Обьясните пожалуйста - C++
struct Test { void test(); }; int main() { Test *ptr = NULL; ptr-&gt;test(); }

обьясните ошибку - C++
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include&lt;iostream&gt;; using namespace std; int main(void) { setlocale(LC_ALL,&quot;Russian&quot;); ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
05.06.2016, 16:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru