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

Рекурсия - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Без дополнительных библиотек текстовый файл http://www.cyberforum.ru/cpp-beginners/thread1087822.html
Без дополнительных библиотек преобразования текстового файла / С++ для начинающих -------------------------------------------------------------------------------- Добрый день! Ребята срочно...
C++ Проложить код программы для решения школьной геометрической задачи Задача: Дано: ABCA1B1C1 – прямая треугольная призма, AB = 13, CB = 14, AC = 15, O – центр описанной окружности, C1OC = 30°. Найдите V. Код: #include <conio.h> #include <iostream> #include... http://www.cyberforum.ru/cpp-beginners/thread1087821.html
Сформировать из некоторой матрицы А(n,n) верхнеугольную, нижнетреугольную и диагональную матрицу C++
Сформировать из некоторой матрицы А(n,n) верхнеугольную матрицу B(n,n) (все элементы ниже главной диагонали нулевые), нижнетреугольную матрицу С(n,n) (все элементы выше главной диагонали нулевые) и...
Перехват функции - GetProcAddress C++
Здравствуйте. Покажите пожалуйста пример, как перехватит в dll "A" , функцию из dll "Б" В интернете только базовые примеры по перехвату функции через указатель, где я могу только через него и...
C++ Как получить битики float http://www.cyberforum.ru/cpp-beginners/thread1087809.html
Здравствуйте! Кто-нибудь знает как получить битики у float? vector<bool>code; int i2 = 0; float one = 1; float x = 0.36 ; for (int i = 0; i < 3; i++){
C++ наследование классов в C++ решил я с SDL поиграться.... ругается на 9 строчку компилятор, где ошибку допустил не подскажете?) main.cpp #include <iostream> #include "Game.h" // our Game object Game* g_game = 0; int... подробнее

Показать сообщение отдельно
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 20:23
Ryuzaki2014,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int factorial(int n) {
    if (n == 1)
        return 1;
    else 
    {
       int tmp = factorial (n -1);
       tmp = tmp*n;
       return tmp;
     }
 
}
 
int main() {
    int n;
    cout << "Enter number";
    cin >> n;
    cout << factorial(n) << '\n';
    system("pause");
}
Я немного переписал функцию для удобства. Надеюсь понятно что я сделал. В данном случае, в функцию передается n, если n не 1, тогда функция вызывает саму себя и передает уже значение n-1, и так пока n не станет 1. Давайте теперь посмотрим что происходит, когда n=1(назовем это первым шагом), функция возвращает 1, на шаг выше в tmp записывается 1, так как в функцию передается n-1, то можно понять, что n=2 на втором шаге. 1*2 = 2 - функция вернула 2 на втором шаге, то есть, на третьем шаге в tmp попало значение 2, а n=3 на этом шаге, потом функция вернет 3*2 = 6, и это значение будет записано в tmp на четвертом шаге. и так дальше.
Точно так же работает Ваша функция, только там опущен момент с tmp.
Если есть вопросы, спрашивайте) рекурсия - это сложная штука)
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru