动态规划的算法启蒙---斐波那契数列

斐波那契数列(概念不介绍了,都点进来了,默认都有基础)

##方法一:递归

后面的项依赖前面的项

每一项都在不停的调用自身,递归最重要的就是找到终止条件

```js

function fib(n) {

console.log(n)

if(n == 0) return 0

if(n == 1) return 1

return fib(n-1) + fib(n-2)

}

```

以40为例,通过打印可以看到递归开销非常大(100直接就停不下来了),可以用动态规划来优化

##方法二:动态规划1.0

计算机有两种开销:时间和空间

缓存 --- 空间换时间

用数组直接存储前面项的计算结果

```js

function fib(n) {

console.log(n)

let arr = \[\]

if(n == 0) return 0

if(n == 1) return 1

for(let i = 2;i<=n;i++){

arri = arri-1 + arri-2

}

return arrn

}

```

不够不够,继续优化

使用数组其实对整个内存的影响也很大

用变量 --- 做原地编辑,不使用额外的空间

动态规划2.0

```js

function fib(n){

if(n <= 1) return n

let prev = 0,current = 1,next

for(let i = 2;i<=n;i++){

next = prev + current

prev = current

current = next

}

return current

}

```

ok!

拓展

webssembly

基于typescript

飞书文档、在线画板。追求性能

画布不会直接用canvas

而是canvaskit - skia - WebAssembly

上面的算法案例,如果用webssembly+递归,时间会非常快,通常不到1ms

相关推荐
菜菜的顾清寒3 分钟前
力扣HOT100(41)动态规划-杨辉三角
算法·leetcode·动态规划
Cthy_hy8 分钟前
Python算法竞赛:集合去重+字典映射 核心用法一站式整理
数据结构·python·算法
Deepoch14 分钟前
Deepoc数学大模型:驱动发动机行业数智化转型的底层解
人工智能·算法·deepoc·数学大模型
happymaker062617 分钟前
LeetCodeHot100——盛水最多的容器
数据结构·算法·leetcode·双指针·hot100
3DVisionary18 分钟前
蓝光三维扫描:磁性轴承全尺寸精密3D检测方案
算法·3d·3d检测·蓝光三维扫描·精密检测·磁性轴承·圆度测量
过期动态23 分钟前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
逻辑君27 分钟前
Foresight研究报告【20260010】
人工智能·算法·机器学习
weixin_4684668532 分钟前
大语言模型原理新手入门指南
人工智能·python·算法·语言模型·自然语言处理·transformer·注意力机制
z2005093035 分钟前
今日算法(回溯找IP,加检测)
算法·leetcode
sheeta199840 分钟前
LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环
笔记·算法·leetcode