算法-斐波那契数列

196 阅读1分钟

题目

请实现一个fabonacci()函数。
斐波那契数列为:[1,1,2,3,5,8,13...]
fabonacci(0) 返回1
fabonacci(4) 返回5
...

实现方案

1.循环累加

循环过程中根据前两项的值计算当前项的值,并更新记录前两项的值,用来求下一个项的值,如此循环到指定位置。

function fibonacci(n){
  if(n === 0){
    return 1;
  }
  if(n === 1){
    return 1;
  }

  let before = 1;
  let beforeTwo = 1;
  let result = 0;

  for (let index = 2; index <= n; index++) {
    result = before + beforeTwo;
    beforeTwo = before;
    before = result;
  }

  return result;
}

//验证
for (let index = 0; index < 20; index++) {
  console.log(fibonacci(index));
}

2.递归实现

递归实现比较直观

// 递归实现
function fibonacci(n) {
  if (n === 0 || n === 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2)
}

//验证
for (let index = 0; index < 20; index++) {
  console.log(fibonacci(index));
}

验证效果

总结

本文总结了斐波那契实现的两种方案:循环和递归,递归实现更直观也方便理解,一般递归都会有对应的循环方案替代。