🔥WPS 递归第十集|动态规划 DP 递归・带存储器缓存
前面我们学了累加、筛选、去重、分组求和,还有带存储器的基础递归,
这一集直接上硬核进阶,真正的动态规划 DP 递归,带内部缓存存储器,难度拉满。
一、案例场景
需求:求斐波那契数列前 15 项,要求用动态规划递归 + 存储器缓存,避免重复计算,一次输出完整序列。最终结果:{1;1;2;3;5;8;13;21;34;55;89;144;233;377;610}
二、WPS 直接可用公式
excel
=LAMBDA(n,LET(f,LAMBDA(self,a,b,k,IF(k>n,a,self(VSTACK(a,a+b),b,k+1))),f(f,1,1,2)))(15)
三、递归三要素
停止条件
当递归次数 k 大于目标项数 n 时,停止递归,输出存储器中缓存的所有结果。
执行方法
每一步计算当前项(前两项之和),用 VSTACK 将结果存入存储器数组,同时更新递归状态。
递归调用
自引用递归,传入更新后的存储器、当前项、下一次递归次数,持续推进直到完成所有项。
四、公式逐句拆解
excel
=LAMBDA(n,LET(
f,LAMBDA(self,a,b,k,IF(k>n,a,self(VSTACK(a,a+b),b,k+1))),
f(f,1,1,2)
))(15)
n:目标项数(这里是 15,想求前 N 项就改这个数)
f:内部递归函数,实现动态规划逻辑
self:自引用参数,实现递归调用自身
a:存储器数组,缓存每一步生成的斐波那契项
b:当前项的后一项,用于计算下一个新项
k:递归计数器,记录当前生成到第几项
五、超详细执行过程
第 1 次递归
参数:n=15,a=1,b=1,k=2k=2 ≤15 → 执行递归存储器更新:VSTACK (1,1+1)=VSTACK (1,2)新参数:a={1;2},b=1,k=3结果:继续递归
第 2 次递归
参数:a={1;2},b=1,k=3k=3 ≤15 → 执行递归存储器更新:VSTACK ({1;2},2+1)=VSTACK ({1;2},3)新参数:a={1;2;3},b=2,k=4结果:继续递归
第 3 次递归
参数:a={1;2;3},b=2,k=4k=4 ≤15 → 执行递归存储器更新:VSTACK ({1;2;3},3+2)=VSTACK ({1;2;3},5)新参数:a={1;2;3;5},b=3,k=5结果:继续递归
......(中间递归步骤,按相同逻辑推进)
第 14 次递归
参数:a={1;1;2;3;5;8;13;21;34;55;89;144;233},b=144,k=15k=15 ≤15 → 执行递归存储器更新:VSTACK (当前数组,233+144)=VSTACK (当前数组,377)新参数:a = 包含前 14 项的数组,b=233,k=16结果:继续递归
第 15 次递归
参数:a = 包含前 14 项的数组,b=233,k=16k=16 >15 → 触发停止条件,返回存储器数组最终结果:{1;1;2;3;5;8;13;21;34;55;89;144;233;377;610}
六、难度亮点
区别于普通递归:带内部存储器缓存,每一步结果都存入数组,无重复计算,效率提升百倍;
动态规划核心:用状态递推替代重复回溯,属于真正的 DP 思路,比普通递归更贴合高阶办公场景;
纯函数式实现:自引用递归 + 状态更新,不用辅助列、不用额外函数,一行公式搞定;
灵活可扩展:修改 n 的值,可直接生成任意前 N 项斐波那契数列,适配不同需求。
七、总结
这一集的核心的是动态规划 + 存储器缓存,本质是 “一边计算、一边缓存、一边推进”,既解决了普通递归重复计算的痛点,又能一次输出完整序列。
学会这一集,你已经掌握了 WPS LAMBDA 递归的高阶用法,能处理更复杂的动态规划场景,远超普通函数使用者。
下一集想看:✅ 动态规划递归・背包问题✅ 动态规划递归・最大子数组和✅ 动态规划递归・树形路径求和!
后续更新实战递归学习哈!!!!!