斐波那契数列的递归、迭代求法、及尾递归优化求法
var fib = function(n){
if(n === 0) return 0
if(n === 1) return 1
return fib(n-1)+ fib(n-2)
}
// 迭代
var fib = function(n) {
if(n===0) return 0
if(n===1) return 1
let a = 0
let b = 1
while(n>1){
let tmp = a+b
a = b
b = tmp
n--
}
return b
};
// 尾递归
var fib = function(n,a=0,b=1) {
if(n===0) return 0
if(n===1) return b
return fib(n-1,b,a+b)
}
----
一个更容易理解的尾递归写法
var fib = function(n) {
if(n === 0){
return 0
}
if(n === 1){
return 1
}
// 尾递归
function iterate(count,a1=1,a0=1){
if(count == n){
return a1
}
return iterate(count+1, a1+a0,a1)
}
return iterate(2)
};
----