斐波那切算法实现方式总结

43 阅读1分钟

斐波那切算法

规律如下

// 1==========1
// 1==========2
// 1,2========3
// 1,2,3======4
// 1,2,3,5====5
// 1,2,3,5,8==6

递归方式

时间复杂度O(2^n),空间复杂度O(n)

function fib(n) {
  if (n < 2) {
    return n;
  }
  return fib(n - 1) + fib(n - 2);
}

尾递归(优化)

时间复杂度O(n),空间复杂度O(1)

function fib(n, a = 0, b = 1) {
  if (n === 0) {
    return a;
  }
  return fib(n - 1, b, a + b);
}

循环方式

时间复杂度O(n),空间复杂度O(1)

function fib(n) {
  let a = 0;
  let b = 1;
  for (let i = 0; i < n; i++) {
    let c = a + b;
    a = b;
    b = c;
  }
  return a;
}

动态规划

时间复杂度O(n),空间复杂度O(n)

function fib(n) {
  let a = [];
  a[0] = 0;
  a[1] = 1;
  for (let i = 2; i <= n; i++) {
    a[i] = a[i - 1] + a[i - 2];
  }
  return a[n];
}