0

我有点难过。我正在处理一个作业问题,要求您通过一系列 30 次迭代找到 e^x 1 + x + x^2/2! ... x^n/n!:. 在这种情况下n = 30,范围x是 -3 到 3。看起来很简单。但是,当尝试在 Java 中执行它时,我发现我很困惑。

当时的想法是运行两个 for 循环。的迭代的外循环和迭代x的内循环n。这是到目前为止的代码:

double series = 1.0;

for (int x=-3; x<=3; x++)
{
    for (int n=1; n<=x+30; n++)
        {
            series = series + (x^n)/n;
            n*=n;
        } 
    System.out.println(""+ x +"\t   "+ (series+1));
}

任何建议将不胜感激。

4

2 回答 2

1

您可能需要更加注意每个变量和循环内的值更改,以更好地验证您的代码。

你犯了几个错误:

  • 将 n 与自身相乘,然后再除以 n。根据您的公式,您需要将数字乘以 n,而不是 nFactorial。此外,nFactorial 是一个要存储的大数(并获得准确的结果),更好地利用每一步除以 n 并乘以 x 的优势(见下面的代码)。
  • 您还使用了 XOR 运算符。而是使用 Math.pow() 方法。
  • 您需要在每个内部循环开始时初始化系列值。
  • 如果您从初始值 1 开始,则不需要在结尾打印 (series+1)。最好将其初始化为 0,或在打印中删除 +1。

以下代码将更好地解决您的目的。

    double series = 1.0;
    double term = 1.0;

    for (int x = -3; x <= 3; x++) {
        series = 1.0;
        term = 1.0;
        for (int n = 1; n <= 30; n++) {
            term = (term * x / n);
            series += term;
        }
        System.out.println("" + x + "\t   " + (series));

    }
于 2016-10-03T18:31:02.260 回答
0

您可以像这样使用 MATH.POW 编写公式:

    for (int x=-3; x<=3; x++)
    {
        for (int n=1; n<=x+30; n++)
            {
                series = series + (Math.pow(x,n)/n);
                n*=n;
            } 
        System.out.println(""+ x +"\t   "+ (series+1));
    }
于 2016-10-03T18:22:12.450 回答