如何求和给定元素左侧的 N 个数组元素?

How to sum up N array elements, to the left of the given element?

对不起,如果问题令人困惑,我是编程新手,我不知道如何表述它,甚至 Google 多次都听不懂我的意思。

我正在尝试求解某种斐波纳契数列,但不是对最后 2 个数求和,而是对最后 N 个数求和。

public double[] sequenceSum(double[] sequence) {
//some fancy method here
}

其中 sequence.length 实际上是您应该求和的数字。 所以如果调用是: seqeunceSum(1,2,3,4);

...序列应继续 {1,2,3,4,10,18,35,67...}。

如果来电是: seqeunceSum(1,0,1,0,1); ...序列应继续 {1,0,1,0,1,3,5,10,19,38....}。

序列当然有其限制,否则它会是无限的,但我只需要帮助如何求和左侧的 N 个数组元素

非常感谢,

EDIT:

谢谢,我从这里听取了一些意见并解决了它。

是的,序列有限制,很抱歉没有将其包含在参数中,我根据之前的建议判断要问最小和具体的问题。

这是我的代码:

public double[] sequenceSum(double[] sequence, int n) {
      double[] xArray = Arrays.copyOf(sequence, n);
      for(int i = sequence.length; i<n; i++){
      double sum = 0;
         for (int j=(i-sequence.length); j < i; j++) {
            sum += xArray[j];
            }
         xArray[i] = sum;
      }
      return xArray;
  }
}

谢谢大家,

最佳做法是保留可在 own/separate 函数中重复使用的相同功能,这样您就可以在程序的其他任何地方使用它。 (同时它使您的代码更加结构化和可读性)

因此将以下函数添加到您的代码中:

public double sumAll(double[] numbers) {
    double result = 0;
    for(int i = 0 ; i < numbers.length; i++){
        result += numbers[i];
    }

    return result;
}

然后您可以在 sequenceSum 函数中调用它,例如:

double sum = sumAll(sequence);
// Your code to create the next sequence elements...

另一个提示:如果您只是将此函数用于斐波那契数列和类似的整数问题,请使用数据类型 int,因为浮点数(在本例中为双精度)累加浮点数 "noise"。 (你找到关于这个问题的信息here

首先,您应该对整数求和而不是对双精度求和。如有必要,您可以将整数转换为双精度数。

其次,您需要包含停止条件。我建议总长度。这将使方法签名:

public int[] sequenceSum(int[] sequence, int length)

我不会给你代码,我只会给你编写代码所需的步骤:

  1. 创建长度为 length 的 int 输出数组。

  2. 获取序列长度。

  3. 将序列数组复制到输出数组。

  4. 对从索引 0 到索引序列长度 - 1 的序列值求和,并将总和添加到输出数组。

  5. 重复第4步,开始索引加1,结束索引加1,直到输出数组满