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

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

##方法一:递归

后面的项依赖前面的项

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

```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++){

arr[i] = arr[i-1] + arr[i-2]

}

return arr[n]

}

```

不够不够,继续优化

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

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

动态规划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

相关推荐
码农小韩几秒前
QT学习记录(三)——C++学习基础(三)
开发语言·c++·qt·学习·算法·嵌入式软件
承渊政道4 分钟前
【动态规划算法】(似包非包以及卡特兰数问题深入解析)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
fangzt201013 分钟前
从零搭建自动驾驶中间件(四):数据录制与回灌——算法调试的核心基础设施
算法·中间件·自动驾驶
搬砖的小码农_Sky21 分钟前
比特币区块链:SHA256哈希函数
算法·区块链·哈希算法
承渊政道30 分钟前
【动态规划算法】(一文讲透二维费用的背包问题)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
Zevalin爱灰灰7 小时前
现代密码学 第二章——流密码【下】
算法·密码学
飞Link9 小时前
大模型长文本的“救命稻草”:深度解析 TurboQuant 与 KV Cache 压缩技术
算法
郝学胜-神的一滴9 小时前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Je1lyfish10 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午10 小时前
03-二叉树——从递归遍历到非递归实现
java·算法