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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
#1

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

09.07.2012, 11:30. Просмотров 1572. Ответов 8
Метки нет (Все метки)

Подскажите, как можно вычислить факториал некоторого числа через рекурсию функций (через цикл либо другим методом не интересует).
Есть следующий кусок кода, но я не могу понять как заставить перемножаться функции друг с другом. Т.е строка 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 11:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Факториал через рекурсию (C++):

НОД через рекурсию - C++
Нужно написать программу для нахождения НОД через рекурсию по такому алгоритму: 1) задать два числа; 2) если числа равны, то взять...

последовательность через рекурсию - C++
нужна ваша помощь задача такая: написать рекурсивную функцию для ввода последовательности чисел и вывода ее на экран в обратном...

Число из 10-ой в 2-ю ,через рекурсию. - C++
Доброго дня. Требуется написать программу (из 2-ой в 10-ю) .С использованием рекурсии. Выход данной программы 0. Что следует поправить? ...

поиск через рекурсию - C++
С помощью массива структур описать каталог компьютерных игр, предусмотрев следующие характеристики: название, производитель, год издания,...

Описание функции через рекурсию - C++
Описать логическую функцию ПОТОМОК(А,В), проверяющую, является ли человек с именем В потомком (ребенком, внуком, правнуком) человека с...

Имитация цикла for через рекурсию - C++
Имитация цикла for через рекурсию

8
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);
  }
}
1
dr.curse
389 / 345 / 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));
}
1
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 выводит
0
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);
  }
}
2
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 || "?
0
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 12:10 #7
Цитата Сообщение от Fooly Посмотреть сообщение
n==1 || !n
это значит - если n=1 или n=0
1
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?
1
defer
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
09.07.2012, 12:30 #9
вот тут можно посмотреть

Рекурсия не могу понять
1
09.07.2012, 12:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 12:30
Привет! Вот еще темы с ответами:

Не высчитывает корень через рекурсию - C++
double kor(double a) { double Xn=0.5*(1+a); if (fabs(Xn-a)&gt;0.0001) return a; else return Xn=0.5*(kor(a-1)+a/kor(a-1)); } void...

Число Фибоначчи через рекурсию - C++
Для заданного числа n посчитать числа ФИбоначчи (то есть число будет равно суме двух предыдущих), которое задано след. соотношениями:...

Найти тангенс x через рекурсию - C++
/*Вычисление тангенса задано формулой Найти тангенс(к примеру,пи/3, n=4) tg(x) = ---------x----------- x^2 ...

Запись элементов стека через рекурсию - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; /*НАША СТРУКТУРА*/ struct List { int x; //информационный...


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

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

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