ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6389|回复: 22

[原创] LAMBDA函数递归:小猫上台阶问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-4 13:11 | 显示全部楼层 |阅读模式
本帖最后由 shaowu459 于 2022-12-4 13:38 编辑

问题描述:
一只小猫想从1楼地面去2楼去吃小鱼干,台阶一共10级。小猫每次能走一个台阶或两个台阶,那么它上楼一共有多少种方案?每次都是怎么上去的?
图片.jpg

小猫上台阶-超人.rar

17.19 KB, 下载次数: 44

评分

9

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-4 13:24 | 显示全部楼层
先来分析一下小猫上台阶的过程。

当小猫第一次走时,有两种选择,上1个台阶或2个台阶:
图片.png

小猫第一次走完之后,会有两种可能,站在第1个台阶或在第2个台阶上。如果站在第1个台阶上,往上又有两种选择,走1个台阶到第2个台阶,或者走2个台阶到第3个台阶。如果站在第2个台阶上,也有两种选择,走1个台阶到第3个台阶,或者走2个台阶到第4个台阶。用公式来表示的话,就是在第一次走时的两种方案上各自HSTACK上1和2这两种方案:
图片.png

小猫第三次走的时候,无论站在哪个台阶上,又各有两种选择,也就是在第二次走完之后的每种方案上再分别增加1和2这两种方案:
图片.png

后面可以按照上面的逻辑递推,直到最后剩余1个或2个台阶时。当小猫走到第8个楼梯时,它只面临剩余两种方案,一次性上2个台阶或者每次分别上1个台阶。当小猫走到第9个楼梯时,它之面临一种方案,再往上上一个台阶。

通过上面的分析我们可以看出,小猫每次走都只有两种选择,每次走的模式是一样的,因此可以考虑用递归来解决。递归的退出条件就是当剩余1个台阶时,之前的每个方案再并上一个1,方案数量不变;当剩余2个台阶时,之前的每个方案再分别并上{1,1}或者2这两种方案。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-4 13:28 | 显示全部楼层
根据上面的分析,我们来定义一个名称fx:
  1. =LAMBDA(n,IF(n=1,1,IF(n=2,{1,1;2,""},IFNA(VSTACK(IFNA(HSTACK(1,fx(n-1)),1),IFNA(HSTACK(2,fx(n-2)),2)),""))))
复制代码
在任意空单元格输入fx并赋予它一个初始变量(台阶总数)即可得到所有方案:
图片.png


TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-4 13:37 | 显示全部楼层
下面拆解公式来说明一下递归运算逻辑:
=LAMBDA(n,       给定台阶总数

               IF(n=1,1,   如果剩余台阶数是1,剩余方案只有上1个台阶
                            IF(n=2,{1,1;2,""},     如果剩余台阶数是2,则有1+1和2两种方案
                                                     IFNA(    纵向堆积时由于维度不同产生的错误值屏蔽为空
                                                             VSTACK(   纵向堆积两种方案
                                                                         IFNA(HSTACK(1,fx(n-1)),1), 选择上1个台阶时和之前的方案并在一起
                                                                         IFNA(HSTACK(2,fx(n-2)),2)  选择上2个台阶时和之前的方案并在一起
                                                                        ),

                                                             "")
                              )
                  )
               )
递归的思考过程可以从下往上思考,看怎么理解方便,思路不同,递归的初始值和细节可能会有微调。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-4 14:15 来自手机 | 显示全部楼层
简单总结来说,用Lambda函数递归时,每步产生的结果可以用Vstack函数或Hstack函数堆积起来以返回最终结果。如果还需要循环,则考虑加上Reduce函数。设计堆积方式的时候可以用一两个循环来推演一下堆积方向和规律。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-4 14:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太强大了,要再消化消化下.

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-4 15:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-4 20:33 | 显示全部楼层
写的真好,1,2,3,5,8..楼梯走法是斐波那契数列的生动体现。
具体走法用365写起来也是比较简洁高效。
感谢shaowu版主的知识分享。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-4 21:01 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-12-4 21:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
牛比!
这好像是哪个,那个什么什么数列来着,82拉菲数列?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-27 20:55 , Processed in 0.038622 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表