0

我正在尝试用 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;
} 
4

1 回答 1

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是第一次迭代。

于 2019-02-16T15:49:51.820 回答