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

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

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

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

05.06.2016, 15:53. Просмотров 185. Ответов 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?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 15:53     Обьясните рекурсию на пальцах
Посмотрите здесь:

Поясните на пальцах) - 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 побочная...

обьясните решение - C++
обьясните решение, что как работает и каким способом итд // Base University.cpp : Defines the entry point for the console...

Обьясните функцию - C++
Обьяните пожалуйста кто сможет строчку где g = rand() / (float) RAND_MAX * groups; int g = peerGroup; while (g == peerGroup) g...

Обьясните пожалуйста - C++
/*Эта программа преобразует галлоноы в литрыс помощью чисел с плавающей точкой.*/ #include &lt;iostream&gt; using namespace std; int ...

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

обьясните ошибку - 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;); ...

Обьясните задание - C++
Задание 7 Не стал переписывать задание т. к. там пример


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
884 / 519 / 112
Регистрация: 05.12.2015
Сообщений: 1,464
05.06.2016, 16:00     Обьясните рекурсию на пальцах #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Владимир848484 Посмотреть сообщение
функция должна вернуть 1 и передать управление в функцию main
Должна вернуть 1 не в main, а в то место, откуда она вызвана, т.е. в factorial(2), он вернет 2*1 в factorial(3) и т.д.
S_el
2089 / 1596 / 305
Регистрация: 15.12.2013
Сообщений: 6,419
05.06.2016, 16:01     Обьясните рекурсию на пальцах #3
Владимир848484, привет. Может-быть поможет:
Рекурсивный метод. Принцип работа
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
05.06.2016, 16:01     Обьясните рекурсию на пальцах #4
Цитата Сообщение от Владимир848484 Посмотреть сообщение
Доходим до вызова с числом n равным 1. Выполняется условие на равенство 1 и функция возвращает 1 в main.
Из main вызывается функция с числом 7. А функция с числом 1 вызывается из функции с числом 2, и в нее возвращает результат.
vadim_bz
1 / 1 / 1
Регистрация: 11.04.2015
Сообщений: 35
05.06.2016, 16:03     Обьясните рекурсию на пальцах #5
После достижения n == 1 функция не сразу возвращается в main, а происходит возврат этой 1 в предыдущий шаг рекурсии, где в свою очередь происходит перемножение с текущим n и так до самого первого шага рекурсии и уже итоговый результат возвращается в main.
Владимир848484
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 5
05.06.2016, 16:10  [ТС]     Обьясните рекурсию на пальцах #6
Cпасибо! Теперь все как по полочкам)
Yandex
Объявления
05.06.2016, 16:10     Обьясните рекурсию на пальцах
Ответ Создать тему
Опции темы

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