Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
bruce_
1 / 1 / 1
Регистрация: 30.01.2013
Сообщений: 67
#1

рекурсия

12.06.2013, 11:52. Просмотров 325. Ответов 8
Метки нет (Все метки)

здравствуйте!
я начал изучать с++... дошел до функций (а именно рекурсии)... я понял, что рекурсия-это функция, которая сама себя вызывает.. так вот.. я решил написать примитивную программу для вычисления факториала...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int fac(int a)
{
    if (a==0){return 1;}else{return a*fac(a-1);}
}
int main()
{
    int a;
    cin>>a;
    cout<<"n!="<<fac(a);
    return 0;
}
выводит правильно все правильно... но мне стало интересно: как я понял, если функция равно 0, то она вернет значение 1... а вот если не 0, то будет повторятся до того, пока она не будет равняться 0. Но если она будет равняться нулю, то программа должна же вывести 1, а выводит факториал числа... надеюсь, что вы поняли, что я имел в виду! покажите мне детально как будет работать моя программа, если я введу 5?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 11:52
Ответы с готовыми решениями:

Рекурсия
Помогите написать функцию которая будет считать эту рекуррентную формулу с...

Рекурсия
Как переделать программу в рекурсию? char S='S', T='T', M={NULL}; int...

Рекурсия
Разработать рекурсивную функцию не возврашающую значений: Дано натуральное...

РЕкурсия
Мне нужно 5 задач по рекурсии с решениями,)))есмли не сложно-помогите, может...

Рекурсия
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;iostream&gt;...

8
Croessmah
++Ͻ
14372 / 8154 / 1534
Регистрация: 27.09.2012
Сообщений: 20,093
Записей в блоге: 3
Завершенные тесты: 1
12.06.2013, 11:57 #2
Цитата Сообщение от bruce_ Посмотреть сообщение
Но если она будет равняться нулю, то программа должна же вывести 1, а выводит факториал числа...
ну так 0! = 1

Добавлено через 1 минуту
Цитата Сообщение от bruce_ Посмотреть сообщение
покажите мне детально как будет работать моя программа, если я введу 5?
можете почитать эту тему:
Сумма цифр натурального числа
второй раз расписывать рекурсию лично я что-то не хочу
0
bruce_
1 / 1 / 1
Регистрация: 30.01.2013
Сообщений: 67
12.06.2013, 12:04  [ТС] #3
Croessmah, чуть чуть не поняли меня... что 0!=1 эт я знаю.. я имел ввиду, что если я возьму 5!, то получится так:
5!=0, поэтому return 5*fac(4).. т.е. из моих соображений будет так: 5*4*3*2*1*fac(1-1)... дальше же a=0.. выводится 120... но в программе же написано, что если а=0, то вернуть 1. вот что я спросил... почему она возвращает не 1 а 120?? получается, что число а не изменяется или как?
0
Croessmah
++Ͻ
14372 / 8154 / 1534
Регистрация: 27.09.2012
Сообщений: 20,093
Записей в блоге: 3
Завершенные тесты: 1
12.06.2013, 12:08 #4
bruce_, пройдите по ссылке из поста #2. Там подробно расписан порядок выполнения.

Добавлено через 1 минуту
Цитата Сообщение от bruce_ Посмотреть сообщение
но в программе же написано, что если а=0, то вернуть 1.
5*4*3*2*1*fac(0)
fac(0) возвратит один, то бишь получим перемножение всех этих чисел при выходе из вызванных функций

Добавлено через 56 секунд
Так же вот полезная ссылка:
Рекурсия и рекурсивные алгоритмы
0
bruce_
1 / 1 / 1
Регистрация: 30.01.2013
Сообщений: 67
12.06.2013, 12:10  [ТС] #5
Croessmah, почитал.. т.е. когда моя функция дойдет до 0, потом она все значения перемножит и вернет это значение?? т.е. программа будет работать до того момента, как не станет истинной??
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
12.06.2013, 12:29 #6
Смотри.
Ты вызываешь fac (5). Твоя функция видит только то, что 5 != 0, значит 5! == 4! * 5. Затем эта функция вызывает fac (4).

Вызвалась fac (4). Твоя функция видит только то, что 4 != 0, значит 4! == 3! * 4. Затем эта функция вызывает fac (3).

Вызвалась fac (3). Твоя функция видит только то, что 3 != 0, значит 3! == 2! * 3. Затем эта функция вызывает fac (2).

Вызвалась fac (2). Твоя функция видит только то, что 2 != 0, значит 2! == 1! * 2. Затем эта функция вызывает fac (1).

Вызвалась fac (1). Твоя функция видит только то, что 1 != 0, значит 1! == 0! * 1. Затем эта функция вызывает fac (0).

Вызвалась fac (0). Твоя функция видит только то, что 0 == 0, значит 0! == 1. Следовательно, 0! = 1.

Вызов fac (0) завершился. Возвращаемся в fac (1). Т.к. fac (1) = 0! * 1, то fac (1) = 1 * 1 = 1; (т.к. fac (0) = 1).

Вызов fac (1) завершился. Возвращаемся в fac (2). Т.к. fac (2) = 1! * 2, то fac (2) = 1 * 2 = 2; (т.к. fac (1) = 1).

Вызов fac (2) завершился. Возвращаемся в fac (3). Т.к. fac (3) = 2! * 3, то fac (3) = 2 * 3 = 6; (т.к. fac (2) = 2).

Вызов fac (3) завершился. Возвращаемся в fac (4). Т.к. fac (4) = 3! * 4, то fac (4) = 6 * 4 = 24; (т.к. fac (3) = 6).

Вызов fac (4) завершился. Возвращаемся в fac (5). Т.к. fac (5) = 4! * 5, то fac (5) = 24 * 5 = 120; (т.к. fac (4) = 24).

Вызов fac (5) завершился. Рекурсия завершена, возвращается значение 120.
0
bruce_
1 / 1 / 1
Регистрация: 30.01.2013
Сообщений: 67
12.06.2013, 12:35  [ТС] #7
Dani, ухх... спасибо) даже не думал, что она гармошкой идет)
0
Croessmah
++Ͻ
14372 / 8154 / 1534
Регистрация: 27.09.2012
Сообщений: 20,093
Записей в блоге: 3
Завершенные тесты: 1
12.06.2013, 12:47 #8
Цитата Сообщение от bruce_ Посмотреть сообщение
даже не думал, что она гармошкой идет)
bruce_, пост #4. Там ссылка. Почитайте, станет понятно что к чему
0
bruce_
1 / 1 / 1
Регистрация: 30.01.2013
Сообщений: 67
12.06.2013, 12:52  [ТС] #9
Croessmah, спасибо) ознакомлюсь)
0
12.06.2013, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 12:52

Рекурсия
на картинке файлик из википедии в которой говорится что рекусия имеет вид...

рекурсия B c++
пожалуйста помогите,почему не работает? дело в рекурсии,функция func1...

рекурсия
Помогите,пожалуйста, изменить рекурсивную ф-цию.сразу прошу не пугаться размера...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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