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

Рекурсия не могу понять - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 31, средняя оценка - 4.94
xADMIRALx
 Аватар для xADMIRALx
66 / 60 / 1
Регистрация: 09.06.2012
Сообщений: 291
29.06.2012, 14:10     Рекурсия не могу понять #1
Здравствуйте программисты,помнится давно давно изучал с++,и тут по новой начал читать книгу и дело дошло до факториала,есть способ через циклы и через рекурсию.Так вот : метод возвращает всё как положено,но вот только я не могу понять как?Как она это делает?так как в конце у нас return 1 почему когда я вывожу в cout у меня 2 6 24 120.Разъесните пожалуйста что как и где происходит,а то блин я чуть монитор уже не выкинул в окно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <locale>
#include <stdlib>
 
 
using namespace std;
 
int factr(int n);
int main()
{
    setlocale(LC_ALL,".1251");
 
    cout << "Факториал числа 5 : " << factr(5)<< endl;
 
 
 
 
 
 
 
    system("PAUSE");
    return 0;
}
int factr(int n)//5
{
    int answer = 0;
 
    if (n == 1) return 1;
    cout << (answer = factr(n - 1) * n) << endl;
    return answer;
 
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2012, 14:10     Рекурсия не могу понять
Посмотрите здесь:

C++ не могу понять...
C++ Не могу понять
Не могу понять запись на с++ C++
C++ Не могу понять
C++ не могу понять
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.07.2012, 10:25     Рекурсия не могу понять #21
Я разве где то утверждал актуальность гонки на факториале? Но и один раз можно сделать быстрее, или медленнее. Время загрузки и инициализации - тоже фактор "быстрости".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SeryZone
 Аватар для SeryZone
56 / 28 / 5
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
01.07.2012, 18:12     Рекурсия не могу понять #22
Слабаки! Я вычислял при помощи кода 20000! Код мощный и быстрый.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
01.07.2012, 18:16     Рекурсия не могу понять #23
В сравнении с чем? Если сравнивать оптимизированным вариантом только для стандартных типов, то он у тебя факториал десяти будет считать дольше, чем в моём варианте считается факториал восемнадцати.
Catstail
Модератор
 Аватар для Catstail
21503 / 10256 / 1670
Регистрация: 12.02.2012
Сообщений: 17,143
01.07.2012, 21:39     Рекурсия не могу понять #24
SeryZone: покажи код!
SeryZone
 Аватар для SeryZone
56 / 28 / 5
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
01.07.2012, 22:40     Рекурсия не могу понять #25
Вот, смотри! Увеличишь количество элементов массива, будет считать и выше 20000!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
 
int main()
 {
  int a[2000]={0}, i, j, n, fl=0, max=0;
  scanf("%d", &n);
  a[0]=1;
  for(i=2; i<=n; i++)
  {
      for(j=0; j<=max; j++)
          a[j]*=i;
      for(j=0; j<max; j++)
          if(a[j]>99999)
          {
              a[j+1]+=a[j]/100000;
              a[j]%=100000;
          }
      if(a[max]>99999)
      {
              a[max+1]+=a[max]/100000;
              a[max++]%=100000;
      }
  }
  for(i=1999; i>=0; i--)
  {
      if(fl==1)
          printf("%05d", a[i]);
      if(a[i]>0 && fl==0)
      {
          printf("%d", a[i]);
          fl=1;
      }
  }
  printf("\n");
return 0;
 }
Можешь и сам код усовершенствовать!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
02.07.2012, 15:39     Рекурсия не могу понять #26
SeryZone, всякая оптимизация бывает только в рамках цели и при определённом комплексе ограничений. Быстрейшая функция работает в короткой арифметике, в длинной всё закономерно медленнее. Не обязательно хуже, если нужна такая длина, то короткотипные функции вообще выпадают по ограничениям. Но медленно. Потому что или жертвуем скоростью ради размера данных, или наоборот.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 23:30     Рекурсия не могу понять
Еще ссылки по теме:

Стек на основе массива структур - эт как понять читаю литературу и не могу понять! C++
не могу понять C++
C++ не могу понять

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

Или воспользуйтесь поиском по форуму:
SeryZone
 Аватар для SeryZone
56 / 28 / 5
Регистрация: 09.03.2012
Сообщений: 726
Записей в блоге: 1
05.07.2012, 23:30     Рекурсия не могу понять #27
Ну, этот код явно не для коротких чисел!
Yandex
Объявления
05.07.2012, 23:30     Рекурсия не могу понять
Ответ Создать тему
Опции темы

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