我试图用C编写一个程序,该程序使用递归函数计算Euler数的阶乘,并将该数据发送到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;
}
答案 0 :(得分:2)
在main
中的第一次迭代中:
sum == 0
last = sum; => last == 0
result = (1 / sum) - (1 / last); => 1 / last == 1 / 0 == inf
然后,从(1 / last)
中减去inf
,即(1 / sum)
,得到负无穷大。
此外,循环不会重复一次,因为您在第一次迭代时return result
。