概念
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 估计自己的电脑就卡死了
优化的思路
- 不用递归,用循环
- 记录中间结果, 定义俩个变量,不断记录前俩位的值
代码实现
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
}
动态规划的思路
- 将一个大问题拆成小问题,小问题还可以继续拆分,并且规则一致
- 用递归的思路去思考, 用循环来实现
算法 三大思路
- 二分
- 动态规划
- 贪心
动态规划-题目
一只青蛙,一次可以跳一级台阶,也可以一次跳两节台阶 问 跳上 n 节台阶, 有多少种方式
2周刷完100道前端优质面试真题 更多视频及资料领取请关注:奋斗的刚子