Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Рекурсивная процедура вычисление факториала
 
 автор: Cena   (13.11.2011 в 02:23)   письмо автору
 
 

Помогите пожалуйста с помощью рекурсии: вычислить значение F по формуле F=-1/2!+2/3!-3/4!+4/5!+...+pow(((-1),n)*n)/(n+1)!
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int i,sum=0,n;
double F;
cout<<"n=";
cin>>n;
for (i=n,i=1; 1<=n; i++)
{F=i*pow(-1,i)/fact(i+1);
sum = sum + fact(int nfact, int i);
fact=fact*i;
}
cout<<"F="<<F<<"\n";
}
int fact(int nfact,int i)
{
nfact = nfact *i;
return nfact;
}
у меня что -то не получается разобраться с рекурсией :((

  Ответить  
 
 автор: cheops   (13.11.2011 в 03:28)   письмо автору
 
   для: Cena   (13.11.2011 в 02:23)
 

Рекурсия - это вызов функции самой себя, у вас две функции, ни одна сама себя не вызывает. При помощи рекурсии должен быть реализован факториал или само вычисление?

PS Код, кстати, лучше помещать в тэги [code], тогда он будет подсвечиваться и в нем будут сохраняться отступы.

  Ответить  
 
 автор: cheops   (13.11.2011 в 03:38)   письмо автору
 
   для: Cena   (13.11.2011 в 02:23)
 

Рекурсивная реализация факториала может выглядеть следующим образом
int fact(int n)
{
  if (n == 1 || n == 0) return 1;
  else return n * fact(n - 1);
}

  Ответить  
 
 автор: Miha_drinking_bout   (16.11.2011 в 18:12)   письмо автору
 
   для: cheops   (13.11.2011 в 03:38)
 

Я вот так организовал в цикле:

main()
 {
      float q=1,n;
     scanf ("%f",&n);    
  
  for (int i = 2; i <= n; i++)
  {
    q *= i;
  }
  printf("%f",q);
  
 }

Только в float большие числа не вмещаются так что n ограничено...
В принципе цикл - это тоже сврего рода рекурсия.

  Ответить  
 
 автор: cheops   (16.11.2011 в 20:08)   письмо автору
 
   для: Miha_drinking_bout   (16.11.2011 в 18:12)
 

Да я тоже предлагал похожее решение в прошлой теме http://softtime.ru/cpp/read.php?id_forum=1&id_theme=1405, но иногда по условиям задачи требуется именно рекурсивное решение.

>В принципе цикл - это тоже сврего рода рекурсия.
Скажем так, они решают схожие задачи, разными методами. Есть задачи, которые циклом не решить (как правило, обход деревьев), по крайней мере без привлечения стека. Есть задачи которые лучше решать циклом (тот же факториал), не смотря на то, что задача имеет изначально рекурсивное определение. Есть языки программирования, которые не поддерживают рекурсию (только циклы), есть языки программирования, которые не поддерживают циклы (только рекурсию). Т.е. нужно быть готовым к любому повороту дел - полному отсутствию какого-либо привычного механизма. Однако в архитектуре фон-Неймана (на современных компьютерах), где есть возможность - лучше избегать рекурсии (она практически не оптимизируется и довольно дорогая по сравнению с циклами).

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования