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

Рекурсия, факториал - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рисование в C++ Windows Forms http://www.cyberforum.ru/cpp-beginners/thread646237.html
Всем здравствуйте такое задание нужно нарисовать с помощью треуголиников, квадратов, прямоугольников и кругов что то на подобие животного цветного с глазами ну в общем все как положено))) (Кошка...
C++ unresolved external symbol в glm.h сидят структуры вида struct Vector2D; struct Vector3D; struct Vector4D; struct Matrix2D; struct Matrix3D; struct Matrix4D; ... http://www.cyberforum.ru/cpp-beginners/thread646204.html
C++ Напечатать все пары дружественных чисел
Помогите пожалуйста решить рационально задачу: Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого, за исключением самого себя (таковы, например,...
Cannot convert 'const wchar_t *' to 'const char *' C++
HMODULE hMod=GetModuleHandle(NULL); if(!hMod) { } HRSRC hRes=FindResource(hMod,"acc.dll",RT_RCDATA); if(!hRes){ } HGLOBAL hGlob=LoadResource(hMod,hRes); if(!hGlob) { } BYTE...
C++ Настройка Geany на Windows (не пашет) http://www.cyberforum.ru/cpp-beginners/thread646157.html
Помогите!!! Может кто встречался с такой проблемой. В общем только Geany установил, воткнул туда код с книжки (перед этим поменял кодировку на Русская и тип файла C++ #include <iostream.h> int...
C++ Недопонимание указателей Уже прошёл их по книжке давно, но они частенько встречаются, и я никак не могу понять некоторые процессы с ними. Допустим есть в классе какие-то данные типа int lim, char name Методы принимают... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,718
Записей в блоге: 5
03.09.2012, 21:22
Цитата Сообщение от Valera59 Посмотреть сообщение
Недавно увидел как пример рекурсии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
 
int f(int n)
{
    if (n == 1)
        return 1;
    return f(n-1)*n;
}
 
int main()
{
    setlocale(0,"");
 
    cout<<f(5);
 
    cin.get();
}
программа должна выдавать факториал 5 и она действительно это делает но я не могу понять почему она это делает.Точнее не понимаю строку 8 чему равно f, и почему программа выполняет ее 5 раз?
Valera59, как я понимаю, функция это ссылка на возвращаемое значение, если требуется результат (rvalue). Поэтому каждый раз этот адрес заносится в стек, как и инструкция умножить на n и следует новый вызов. Пока не будет достигнут return. После этого вычисления проводятся в обратном порядке (как в польской нотации), то есть 1*2*3*4*5. Единица умножается на n 5 раз, но n каждый раз на 1 больше (как и сохранялось). То есть стек выгружается (исполняется) пока не будет достигнут адрес первого (внешнего) вызова.

Не по теме:

Может сумбурно как-то сказал.



Добавлено через 16 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Valera59, как я понимаю, функция это ссылка на возвращаемое значение, если требуется результат (rvalue). Поэтому каждый раз этот адрес заносится в стек, как и инструкция умножить на n и следует новый вызов.
Правильно скорее:
Valera59, как я понимаю, функция это возвращаемое значение, если требуется результат (rvalue).
Поскольку вызывая себя функция не возвращает значение то в стек заносится инструкция умножить на n и следует новый вызов.
Насочинял...
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.