斐波拉契数列js实现

十二月 08, 2018
  1. 递归(这种方法容易造成浏览器假死)
function fb1(n) {
  if (n <= 2) {
    return 1;
  } else {
    return fb1(n - 1) + fb1(n - 2);
  }
}
  1. 尾调用优化
// 在方法1的递归方法基础上进行尾调用优化
function fb(n, res1 = 1, res2 = 1) {
  if (n <= 2) {
    return res2;
  }
  return fb(n - 1, res2, res1 + res2);
}

console.log(fb(6));
  1. 迭代方式
function fb(n) {
  var res1 = 1;
  var res2 = 1;
  var sum = res2;
  for (var i = 2; i < n; i++) {
    sum = res1 + res2;
    res1 = res2;
    res2 = sum;
  }
  return sum;
}