🔥WPS 递归第六集|递归查找位置,递归搞定!
前面我们玩了累加、阶乘、最大值、倒序,今天来个最实用、最香的:递归查找 + 返回位置!
再也不用嵌套一堆 MATCH、IF 公式了,纯递归手写,逻辑清晰,新手也能秒会!
📌 实战场景
A 列数据:{"苹果","香蕉","橙子","梨"}我们要找 "橙子" 在第几个?
一、案例需求
有一组数据:{"苹果","香蕉","橙子","梨"}
我们要查找:"橙子"想知道它在第几个位置。
期望结果:第 3 位
二、WPS 可直接运行公式
excel
=LAMBDA(查找值,数据区域,IF(ROWS(数据区域)=0,-1,IF(INDEX(数据区域,1)=查找值,1,1+MYSELF(查找值,DROP(数据区域,1))))("橙子",{"苹果","香蕉","橙子","梨"})
执行结果:3
三、递归三要素
停止条件
数据区域为空,说明没找到,返回 -1
第一个值 = 查找值,说明找到了,返回 1
执行方法如果没找到,就继续在剩下的数据里找,找到后结果 +1(表示位置往后挪一位)
循环体(递归调用)DROP(数据区域,1) 去掉第一个值,用剩下的内容继续递归查找。
四、逐字逐句拆解公式
excel
=LAMBDA(查找值,数据区域,
IF( ROWS(数据区域)=0, -1,
IF( INDEX(数据区域,1)=查找值,1, 1 + MYSELF(查找值,DROP(数据区域,1)) ) ))("橙子",{"苹果","香蕉","橙子","梨"})
五、最详细执行过程
我们现在手动模拟电脑运行这行公式,完全不跳步:
第 1 次调用
数据区域:{"苹果","香蕉","橙子","梨"}第一个值:苹果苹果 ≠ 橙子所以:结果 = 1 + 下一次递归
第 2 次调用
数据区域:{"香蕉","橙子","梨"}(去掉了苹果)第一个值:香蕉香蕉 ≠ 橙子所以:结果 = 1 + 下一次递归
第 3 次调用
数据区域:{"橙子","梨"}(去掉了香蕉)第一个值:橙子橙子 = 橙子触发停止条件,返回:1
六、开始往回计算(回溯)
现在从最里面一层往外返回:
第 3 次返回:1
第 2 次得到:1 + 1 = 2
第 1 次得到:1 + 2 = 3
最终结果:3
七、总结
递归查找就是:一个个往后找,找到后把层数加起来就是位置。
学会这一集,递归你就真的入门了!
下一集想看:递归统计出现次数?递归查找最后一次出现位置?评论区告诉我,继续安排!