# 斐波那契数列
# 递归
function fibonacci(n) {
if (n === 0) return 0
if (n === 1) return 1
if (n > 1) return fibonacci(n - 1) + fibonacci(n - 2)
}
# 迭代
function fibonacci(n) {
let last2 = 0
let last = 1
let current = last2
for (let i = 1; i <= n; i++) {
last2 = last
last = current
current = last2 + last
}
return last
}
# 尾递归
function fibonacci(n) {
var _fib = function(n, a, b) {
if (n === 0) return a
return _fib(n - 1, b, a + b)
}
return _fib(n, 0, 1)
}
# 记忆函数
// 记忆函数 memozi
function memozi(fn) {
var r = {}
return function(n) {
// 如果检测到还未被缓存,则先存入 r
if (r[n] == null) {
r[n] = fn(n)
}
return r[n]
}
}
var memoziFibon = memozi(function(n) {
if (n === 0) return 0
if (n === 1) return 1
return memoziFibon(n - 1) + memoziFibon(n - 2)
})
console.log(memoziFibon(50))