🔥WPS 递归第五集|数组递归倒序排列
一行函数实现数组反转,不用 SORT,不用辅助列,纯递归手写!
前几集我们学了递归累加、阶乘、数组求和、查找最大值,这一集挑战递归数组倒序,真正体现递归思维。
一、案例需求
把数组 {1,2,3,4,5} 反转成:{5,4,3,2,1}
二、WPS 可直接运行公式
excel
=LAMBDA(arr,IF(ROWS(arr)=1,arr,VSTACK(MYSELF(DROP(arr,1)),INDEX(arr,1))))({1,2,3,4,5})
三、递归三要素
停止条件
数组只剩 1 个元素时,直接返回,不再递归
执行方法
把 “剩余数组倒序结果” 放在上面,把第一个元素放在最下面
循环体
去掉第一个元素,继续递归处理剩下的数组
四、逐句拆解
excel
=LAMBDA(arr,
IF(ROWS(arr)=1,
arr,
VSTACK(MYSELF(DROP(arr,1)), INDEX(arr,1))))
({1,2,3,4,5})
arr:传入要倒序的数组
ROWS(arr)=1:停止条件
DROP(arr,1):去掉第一个元素
MYSELF(DROP(arr,1)):递归倒序剩余部分
VSTACK(…, INDEX(arr,1)):把第一个元素拼在最后面,实现倒序
五、执行流程
倒序 {1,2,3,4,5}
= 倒序 {2,3,4,5} & 拼接 1
= 倒序 {3,4,5} & 拼接 2 & 拼接 1
= 倒序 {4,5} & 拼接 3 & 拼接 2 & 拼接 1
= 倒序 {5} & 拼接 4 & 拼接 3 & 拼接 2 & 拼接 1
最终得到:{5,4,3,2,1}
六、使用示例
你可以直接替换数组测试:
excel
=LAMBDA(arr,IF(ROWS(arr)=1,arr,VSTACK(MYSELF(DROP(arr,1)),INDEX(arr,1))))({10,20,30,40})
结果:{40,30,20,10}
七、总结
递归倒序的核心思想:
每次只拿第一个数,丢到最后面,剩下的继续递归。
学会这一集,你已经掌握:递归 + 数组操作 + 栈式结构思维,
WPS 高阶函数基本已经通关一半。
下一集直接上硬核难度:递归展开多维数组 / 递归遍历查找 / 递归生成序列,想要哪个我直接给你写完整版社区帖子!