很抱歉,如果问题很混乱,我是编程新手,我不知道如何制定它,甚至Google也无法理解我的次数。
我正在尝试解决某种Fibonnaci序列,但不是总结最后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个数组元素,在左边
非常感谢,
编辑:
谢谢,我从这里收到了一些意见,我解决了它。
是的,序列有限制,抱歉不包括在参数中,我根据之前的建议判断,询问最小和特定的问题。
这是我的代码:
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;
}
}
谢谢大家,
答案 0 :(得分:1)
最佳做法是保留可在自己/单独功能中重复使用的相同功能,因此您可以在程序中的任何其他位置使用此功能。 (它还使您的代码更具结构性和可读性)
因此,请在代码中添加以下函数:
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...
另一个提示:如果你只是将这个函数用于Fibbonaci序列和类似的整数问题,请使用数据类型int,因为浮点数(在这种情况下为double)加起来浮点&#34; noise&#34;。 (您可以找到有关此问题的信息here)
答案 1 :(得分:1)
首先,你应该对整数而不是双精数求和。如有必要,您可以将整数转换为双精度。
其次,您需要包含停止条件。我建议总长度。这将使方法签名:
public int[] sequenceSum(int[] sequence, int length)
不是给你代码,而是给你编写代码所需的步骤:
创建长度为length的int输出数组。
获取序列长度。
将序列数组复制到输出数组。
对从索引0到索引序列长度为1的序列值求和,并将总和添加到输出数组中。
重复步骤4,将1添加到起始索引并将1添加到结束索引,直到输出数组已满。