前端面试真题,2周刷完100道。12. 动态规划解决斐波那契数

146 阅读1分钟

概念

0,1,1,2,3,5,8,13 .。。 第n 个数 是前俩个数的和

用递归的方式实现

function feibonaq (n:number):number {
  if (n===0) return 0
  if (n===1) return 1
  return feibonaq(n-1) + feibonaq(n-2)
}

这种算法存在重复计算, 所以时间复杂度很高, 如果输入200 估计自己的电脑就卡死了

优化的思路

  1. 不用递归,用循环
  2. 记录中间结果, 定义俩个变量,不断记录前俩位的值

代码实现

function feibonaq2(n:number): number {
  if (n===0) return 0
  if (n===1) return 1

  let n1 = 1
  let n2 = 0
  let res = 0

  for (let i=2; i<=n;i++) {
    res = n1 + n2
    n2 = n1
    n1 = res
  }
  return res
}

动态规划的思路

  1. 将一个大问题拆成小问题,小问题还可以继续拆分,并且规则一致
  2. 用递归的思路去思考, 用循环来实现

算法 三大思路

  1. 二分
  2. 动态规划
  3. 贪心

动态规划-题目

一只青蛙,一次可以跳一级台阶,也可以一次跳两节台阶 问 跳上 n 节台阶, 有多少种方式

2周刷完100道前端优质面试真题 更多视频及资料领取请关注:奋斗的刚子