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

Факториал через рекурсию - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
09.07.2012, 11:30     Факториал через рекурсию #1
Подскажите, как можно вычислить факториал некоторого числа через рекурсию функций (через цикл либо другим методом не интересует).
Есть следующий кусок кода, но я не могу понять как заставить перемножаться функции друг с другом. Т.е строка result=result*m; не работает так, как хотелось бы мне, она не запоминает результат прошлого перемножения, а постоянно представляется как result=1*m; Выручайте плз =)
C++
1
2
3
4
5
6
7
8
9
10
int recurs(int n)
{
    int m=n;
    int result=1;
    if (n>1)
        {recurs(n-1);
    }
    result=result*m;
    return result;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 11:40     Факториал через рекурсию #2
пользуйтесь поиском

C++
1
2
3
4
5
6
7
8
9
10
int fact(int i)
{
  if(i==0)
  return(i);
  else
  {
    i=i*fact(i-1);
    return(i);
  }
}
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
09.07.2012, 11:47     Факториал через рекурсию #3
а не проще ли так? или я неправильно понял задачу?
C++
1
2
3
4
int fact(int n)
{
    return (n==1 || !n ? 1 : n*fact(n-1));
}
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
09.07.2012, 11:50  [ТС]     Факториал через рекурсию #4
Цитата Сообщение от defer Посмотреть сообщение
пользуйтесь поиском

C++
1
2
3
4
5
6
7
8
9
10
int fact(int i)
{
  if(i==0)
  return(i);
  else
  {
    i=i*fact(i-1);
    return(i);
  }
}
Спс, только i==1 нужно заменить, а то всегда 0 выводит
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 11:56     Факториал через рекурсию #5
ну правильнее всего, еще проверять, чтобы число не было отрицательным

C++
1
2
3
4
5
6
7
8
9
10
11
12
int fact(int i)
{
  if(i<0)
    //тут возвращаем ошибку
  else if(i==0)
    return(1);
  else
  {
    i=i*fact(i-1);
    return(i);
  }
}
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
09.07.2012, 11:59  [ТС]     Факториал через рекурсию #6
Цитата Сообщение от aram_gyumri Посмотреть сообщение
а не проще ли так? или я неправильно понял задачу?
C++
1
2
3
4
int fact(int n)
{
    return (n==1 || !n ? 1 : n*fact(n-1));
}
Спс, этот код оказался рабочим.
Только для чего нам следующая часть " n==1 || "?
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 12:10     Факториал через рекурсию #7
Цитата Сообщение от Fooly Посмотреть сообщение
n==1 || !n
это значит - если n=1 или n=0
Fooly
 Аватар для Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
09.07.2012, 12:16  [ТС]     Факториал через рекурсию #8
Цитата Сообщение от defer Посмотреть сообщение
это значит - если n=1 или n=0
так код и без первой части работает корректно, для чего она нам?
И всё равно я никак не могу понять как работает return (!n ? 1 : n*fact(n-1));
Т.е пока n>0 вычисляется n*fact(n-1), как только n=0, то ведь функция должна вернуть 1. почему она возвращает факториал о_О


Ах да defer, ещё на счёт твоего кода, там нужно замениь return(i) на return 1, тогда работает корректно
C++
1
2
3
4
5
6
7
8
9
10
int fact(int i)
{
  if(i==0)
  return 1;
  else
  {
    i=i*fact(i-1);
    return(i);
  }
}
А так этот код тот же самый, что и сокращенный return (!n ? 1 : n*fact(n-1)) В нём же тоже пока в else уменьшается i, и когда доходит до 0, т.е i=0, почему возвращается произведение, а не 1?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 12:30     Факториал через рекурсию
Еще ссылки по теме:

последовательность через рекурсию C++
поиск через рекурсию C++
C++ Найти тангенс x через рекурсию

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

Или воспользуйтесь поиском по форуму:
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 12:30     Факториал через рекурсию #9
вот тут можно посмотреть

Рекурсия не могу понять
Yandex
Объявления
09.07.2012, 12:30     Факториал через рекурсию
Ответ Создать тему
Опции темы

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