js求斐波那契数列

斐波那契数列

第一个数为0,第二个数为1,之后每个数都是前两个数之和

// 递归O(2^n)
function fibonacci(n){
    
    
  if(n<=0) return 0
  if(n===1) return 1
  return fibonacci(n-1) + fibonacci(n-2)
}

请添加图片描述

优化

  • 不用递归、用循环
  • 记录中间结果
  • 时间复杂度为O(n)
// O(n)
function fibonacci(n){
    
    
  if(n<=0) return 0
  if(n===1) return 1

  let n1 = 1 // 记录n-1的结果
  let n2 = 0 // 记录n-2的结果
  let res = 0
  for(let i =2 ;i<=n;i++){
    
    
    res = n1+n2
    // 记录中间结果
    n2 = n1
    n1 = res
  }
  return res
}

动态规划

  • 用递归的思路分析问题,用循环来解决问题

猜你喜欢

转载自blog.csdn.net/qq_47234456/article/details/124936893