js 斐波那契序列

// 旧版, 由于有递归, 时间空间复杂度太大
function fib1(n) {
  if (n === 1 || n === 2) {
    return 1;
  } else {
    return fib1(n - 1) + fib1(n - 2);
  }
}

// 新版, 不要递归, 只遍历一次
function fib2(n) {
  let seq = [].fill.call({ length: n}, 0);
  seq[0] = seq[1] = 1;
  for (var i = 2; i <= (n - 1); i++) {
    seq[i] = seq[i - 1] + seq[i - 2]
  }
  return seq[i - 1];
}

// 测试代码, fib1 不要传入 大于 50 的数, 电脑可能会卡死很久, fib2 可以传入比如 1000, 10000 一秒就遍历完了
console.time(1)
fib1(20);
console.timeEnd(1)
console.time(2)
fib2(20);
console.timeEnd(2)

求第n个斐波那契数

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

fibonacciRecursively(n, acc1, acc2) {
  if (n === 0) return acc1;
  return fibonacciRecursively(n - 1, acc2, acc1 + acc2);
}
posted @ 2017-11-14 16:06  shrekuu  阅读(107)  评论(0编辑  收藏  举报