Число Эйлера с использованием рекурсивной функции в C - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь создать программу на C, которая использует рекурсивную функцию для вычисления факториала для числа Эйлера и отправляет эти данные в main, где рекурсивная функция должна останавливаться, как только два последовательных значения имеют разницу 0,0000001, однако яне могу заставить мою программу работать, так как она продолжает возвращать -inf.Кто-нибудь знает, что я делаю не так?РЕДАКТИРОВАТЬ: С помощью этого текущего кода я могу заставить программу печатать результат как 0,5, но он не увеличивается на n после 2.

#include <stdio.h>
double factorial(double n);

int main ()
{
  double n;
  double sum = 0;
  double last;
  double result = 0;
  for (n = 1; result <=0.0000001; n++)
  {  
    last  = sum;
    sum = factorial(n);
    result  = (1 / last) - (1 / sum);
    printf("result is %lf\n", result);
  }
  printf("result is %lf\n", result); // troubleshooting
  return 0;
}

double factorial(double n)
{
  if (n > 0)
    return ( n * factorial(n-1));
  else
    return 1;
} 

1 Ответ

0 голосов
/ 16 февраля 2019

На первой итерации в main:

sum == 0
last = sum; => last == 0
result  = (1 / sum) - (1 / last); => 1 / last == 1 / 0 == inf

Затем вы вычитаете (1 / last), то есть inf, из (1 / sum) и получаете отрицательную бесконечность.

Кроме того, цикл никогда не повторяется более одного раза, потому что вы return result на самой первой итерации.

...