-3

我需要使用系列来近似 e:e= 1+ 1/1!+1/2!+..+1/n!其中 n=100000 这是我所做的,但它拒绝编译..

public class Test {


  public static void main(String args[]) {
      long e = 0;
      for (int i = 1; i <= 100000; i++) {
   e += 1.0 / factorial(i);       
      }

      System.out.println(e);
   }
   public static long factorial(long number) {
      if (number <= 1) return 1;
      else return number * factorial(number - 1);
   }
}
4

2 回答 2

0

我会使用双打而不是多头来防止任何错误。

绝对不需要 100000 次迭代。您最多可以在 100 之后停止。

因为 e = 1 + 1/n! 从 e=1 开始,否则你将得到 1.718。

像这样的阶乘方法会简单得多,并且不必调用自己

public static double factorial(int number) 
  {
  double factorial = 1;
  while (number>1)
  {
      factorial*=number;
      number--;
    }
  return factorial;
 }
于 2017-10-11T02:36:33.653 回答
0

您的代码有 2 个问题:

  1. 你需要定义e为双。
  2. 100000 是多次迭代的方式,你得到 StackOverflow,你将在 18 的迭代中达到最大精度并得到1.7182818284590455. 在那之后它不会改变。

它也不e是,但这是一个单独的问题。如果你真的想得到 e 的近似值,你还需要给它加一个。或从double e = 1.

于 2017-10-11T02:22:42.803 回答