🔥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)


三、递归三要素

  1. 停止条件

当递归次数 k 大于目标项数 n 时,停止递归,输出存储器中缓存的所有结果。

  1. 执行方法

每一步计算当前项(前两项之和),用 VSTACK 将结果存入存储器数组,同时更新递归状态。

  1. 递归调用

自引用递归,传入更新后的存储器、当前项、下一次递归次数,持续推进直到完成所有项。


四、公式逐句拆解

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}


六、难度亮点

  1. 区别于普通递归:带内部存储器缓存,每一步结果都存入数组,无重复计算,效率提升百倍;

  1. 动态规划核心:用状态递推替代重复回溯,属于真正的 DP 思路,比普通递归更贴合高阶办公场景;

  1. 纯函数式实现:自引用递归 + 状态更新,不用辅助列、不用额外函数,一行公式搞定;

  1. 灵活可扩展:修改 n 的值,可直接生成任意前 N 项斐波那契数列,适配不同需求。


七、总结

这一集的核心的是动态规划 + 存储器缓存,本质是 “一边计算、一边缓存、一边推进”,既解决了普通递归重复计算的痛点,又能一次输出完整序列。

学会这一集,你已经掌握了 WPS LAMBDA 递归的高阶用法,能处理更复杂的动态规划场景,远超普通函数使用者。


下一集想看: 动态规划递归・背包问题 动态规划递归・最大子数组和 动态规划递归・树形路径求和!

后续更新实战递归学习哈!!!!!

浙江省
浏览 228
1
6
分享
6 +1
1
1 +1
全部评论 1
 
SRunnnner
大神,归神
· 山西省
回复