【发布时间】:2016-09-03 06:48:57
【问题描述】:
我的学校任务是实现一个方法来检查给定的ArrayList 是否是斐波那契数列的一部分。
数组不能为空,且必须大于3。
我知道我必须检查数组的一个数字和下一个数字是否是斐波那契数列的一部分,但是我有很多麻烦,因为如果它是数组的任何一部分,你应该接受它顺序,而不仅仅是从一开始。
例如:0 1 1 2 3 5 和 2 3 5 8 13 21 将被接受。
到目前为止,这是我的代码。我知道它有很大的缺陷,但我真的不知道如何继续。
public class ArrayCheck {
/**
* Tests if the given array is a part of the Fibonacci sequence.
*
* @param arr array to be tested
* @return true if the elements are part of the fibonacci sequence
*/
public boolean isFibonacci(ArrayList<Integer> arr) {
//check if array exists
if(arr.size() == 0)
return false;
//check if array is bigger than 3
if (arr.size() < 3)
return false;
//check for the startsequence of 0,1,1
else if(arr.get(0) == 0 && arr.get(1) == 1 && arr.get(2) == 1)
return true;
//check every number in array
for(int i = 0; i < arr.size(); i++) {
//check if i >= 2 is fib
if(i >= 2) {
int fibn = i;
int nextfib = i + 1;
int fibnew = (fibn - 1) + (fibn - 2);
int fibnext = (nextfib - 1) + (nextfib - 2);
if (arr.get(i) != fibnew && arr.get(i + 1) != fibnext)
return false;
}
//check if the order is right
if(arr.get(i) > arr.get(i+1))
return false;
}
return true;
}
非常感谢任何帮助!
【问题讨论】: