Число Эйлера с использованием рекурсивной функции в C
Я пытаюсь создать программу на 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 ответ
На первой итерации в main
:
sum == 0
last = sum; => last == 0
result = (1 / sum) - (1 / last); => 1 / last == 1 / 0 == inf
Тогда вы вычитаете (1 / last)
, который inf
, от (1 / sum)
и получить отрицательную бесконечность.
Кроме того, цикл никогда не повторяется более одного раза, потому что вы return result
на самой первой итерации.