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

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

Восстановить пароль Регистрация
 
Владимир848484
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 5
05.06.2016, 15:53     Обьясните рекурсию на пальцах #1
Привет всем!
Классическая задача на рекурсию с факториалом.
#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++ Обьясните.
Обьясните функцию C++
C++ Обьясните задание
Обьясните запись C++
C++ Поясните на пальцах)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
avgoor
562 / 352 / 83
Регистрация: 05.12.2015
Сообщений: 1,137
05.06.2016, 16:00     Обьясните рекурсию на пальцах #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Владимир848484 Посмотреть сообщение
функция должна вернуть 1 и передать управление в функцию main
Должна вернуть 1 не в main, а в то место, откуда она вызвана, т.е. в factorial(2), он вернет 2*1 в factorial(3) и т.д.
S_el
1906 / 1501 / 295
Регистрация: 15.12.2013
Сообщений: 5,914
05.06.2016, 16:01     Обьясните рекурсию на пальцах #3
Владимир848484, привет. Может-быть поможет:
Рекурсивный метод. Принцип работа
Mr.X
Эксперт С++
 Аватар для Mr.X
2800 / 1576 / 246
Регистрация: 03.05.2010
Сообщений: 3,658
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     Обьясните рекурсию на пальцах
Ответ Создать тему
Опции темы

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