说明
数列特点,每个数等于前面两个数字的和,以1,1开始,得到第n个元素是多少?(假设n大于等于2)
思路
如果以数组进行比较麻烦,尝试用队列的方式去解决,具体思路如下:
1.每次头部删除一个元素,得到del_item;
2.得到头部元素,为head_item;
3.将加和得到的元素,加入到队列
4.指针+1
5.循环终止条件是index == n-2
代码实现
function FibonacciN(n){
let myQueue = new Queue(),index =1 ;
myQueue.enqueue(1);
myQueue.enqueue(1);
while(index<= n - 2){
let del_item = myQueue.dequeue();
let head_item = myQueue.head();
let next_item = del_item + head_item;
myQueue.enqueue(next_item);
index++
}
myQueue.dequeue();
return myQueue.head();
}
递归分析
其实,仔细思考一下,这个数列在得到第n项的时候是个递归的过程,f(n) = f(n-1) + f(n-2),递归解决会更简单。
代码实现如下:
function FibonacciN2(n){
if(n < 3){
return 1
} else {
return FibonacciN2(n-2) + FibonacciN2(n-1)
}
}