斐波那契数列的递归、迭代求法、及尾递归优化求法

 
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)
};
----
posted @ 2020-06-25 11:50  hh9515  阅读(297)  评论(0)    收藏  举报