function fib(n){
if(n===1 || n===2) return 1
return fib(n-1) + fib(n-2)
}
这是使用递归方法来实现,n就是斐波那契数列位数的值,不过这种有个缺点,就是当n的值很大的时候(位数高的时候)会很消耗性能,会计算很久
function fib(n){
let a=1,b=1,c
for( let i=3; i<n ;i++){
c=a+b
a=b
b=c
}
return b
}
这是使用非递归的传统用法,在性能上会比较好点
function fib(n) {
let arr = [0, 1, 1]
let(i=3; i<=n; i++) {
arr[i] = arr[i-1] + arr[i-2]
}
return arr[n]
}
这是使用空间转换率来实现
function fib(n) {
let cache = [0, 1, 1]
function _fib(n) {
if(cache[n]) return cache[n]
cache[n] = _fib(n-1) + _fib(n-2)
return cache[n]
}
return _fib(n)
}
这是利用缓存来实现的,极大的提高性能,不用去重新去计算一些计算过的值