for循环

var fibona = function (n) {
  var num1 = 1
  var num2 = 1
  var num3 = 0
  for (var i = 3; i <= n; i++) { // 第三个数开始求和, 求到n
    num3 = num1 + num2
    num1 = num2
    num2 = num3
  }
  return num3
}

递归

var fibona = function (n) { // 递归调用函数
  if (n === 1 || n == 0) {
    return n
  }
  return fibona(n - 1) + fibona(n - 2)
}

闭包缓存

var fibona = (function () {
  var temp = [] // {} 对象快过数组. 因为数组第一次赋值的时候, 会将数组的前面都置为undefined
  return function (n) {
    if (temp[n]) { // 缓存数组, 减少调用次数
      return temp[n]
    } else {
      return temp[n] = (n === 0 || n === 1) ? n : fibona(n - 1) + fibona(n - 2)
    }
  }
})()

递归尾调用

function fibona(n, n1 = 1, n2 = 1) {
  if (n <= 2) {
    return n2
  }
  return fibona(n - 1, n2, n1 + n2)
}

相关文章:

  • 2021-10-16
  • 2022-03-08
  • 2021-09-04
  • 2022-02-16
  • 2022-12-23
猜你喜欢
  • 2021-12-08
  • 2021-10-02
  • 2022-01-21
  • 2021-10-10
  • 2021-06-09
  • 2022-02-15
相关资源
相似解决方案