斐波那契数列实现

斐波那契数列实现

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)
}
posted @ 2018-06-20 11:11  张润昊  阅读(186)  评论(0编辑  收藏  举报