理解为什么我的for循环不适用于近似e

时间:2018-03-12 18:16:42

标签: java for-loop nested-loops eulers-number

e可以使用公式e = 1 +(1/1!)+(1/2!)+(1/3!)... +(1 / n!)来近似。我试图使用for循环接受用户设置n的任何整数。该程序应使用上面的公式(1/1!)+ ....(1 / n!)来近似e,然后输出结果。

嵌套for循环计算n的阶乘(单独测试它并且它起作用),并且定义的变量frac将阶乘放入1 /(回答阶乘)的分数。我将值存储到变量e中,并且每次迭代完成时都应该将新分数添加到旧值。我不能不理解我的循环有什么问题,他们没有给出正确的答案。

System.out.println("Enter an integer to show the result of 
approximating e using n number of terms.");
int n=scan.nextInt();
double e=1;
double result=1;
for(int i=1; n>=i; n=(n-1))
{
    for(int l=1; l<=n; l++)
            {
                result=result*l;
            }
    double frac=(1/result);
    e=e+frac;
}
System.out.println(e);

输入整数7时的输出为n = 1.0001986906956286

1 个答案:

答案 0 :(得分:0)

你不需要整个内循环。您所需要的只是result *= i

for (int i = 1; i <= n; i++)
{
    result *= i;
    double frac = (1 / result);
    e += frac;
}

这是我刚刚聚集在一起的JavaScript版本:

function init() {
  const elem = document.getElementById('eapprox');

  let eapprox = 1;
  const n = 15;
  let frac = 1;

  for (var i = 1; i <= n; ++i) {
    frac /= i;
    eapprox += frac;
  }

  elem.textContent = eapprox;
}

这产生2.718281828458995。 Plunker:http://plnkr.co/edit/OgXbr36dKce21urHH1Ge?p=preview