说明

数列特点,每个数等于前面两个数字的和,以1,1开始,得到第n个元素是多少?(假设n大于等于2)

思路

如果以数组进行比较麻烦,尝试用队列的方式去解决,具体思路如下:
1.每次头部删除一个元素,得到del_item;
2.得到头部元素,为head_item;
3.将加和得到的元素,加入到队列
4.指针+1
5.循环终止条件是index == n-2

代码实现

  1. function FibonacciN(n){
  2. let myQueue = new Queue(),index =1 ;
  3. myQueue.enqueue(1);
  4. myQueue.enqueue(1);
  5. while(index<= n - 2){
  6. let del_item = myQueue.dequeue();
  7. let head_item = myQueue.head();
  8. let next_item = del_item + head_item;
  9. myQueue.enqueue(next_item);
  10. index++
  11. }
  12. myQueue.dequeue();
  13. return myQueue.head();
  14. }

递归分析

其实,仔细思考一下,这个数列在得到第n项的时候是个递归的过程,f(n) = f(n-1) + f(n-2),递归解决会更简单。

代码实现如下:

  1. function FibonacciN2(n){
  2. if(n < 3){
  3. return 1
  4. } else {
  5. return FibonacciN2(n-2) + FibonacciN2(n-1)
  6. }
  7. }