ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] LAMBDA函数递归:m选n所有组合问题

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-13 08:46 | 显示全部楼层
更新一个9个及以下元素全排列(9个有36万多个结果,回车后稍等能正常返回,10个362万多个结果无法全部返回),两个字符的直接输出结果不递归了(字符串至少两个字符,否则需要把跳出条件len(z)=2改改):
定义名称fx:
  1. =LAMBDA(z,IF(LEN(z)=2,VSTACK(z,RIGHT(z)&LEFT(z)),DROP(REDUCE(0,MID(z,SEQUENCE(LEN(z)),1),LAMBDA(x,y,VSTACK(x,y&fx(SUBSTITUTE(z,y,))))),1)))
复制代码

图片.png

TA的精华主题

TA的得分主题

发表于 2023-12-13 17:04 | 显示全部楼层
请问为什么文件无法下载?

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-14 08:56 | 显示全部楼层
clx哈哈哈 发表于 2023-12-13 17:04
请问为什么文件无法下载?

昨天论坛应该是有点故障,现在下载试试,应该可以了。

TA的精华主题

TA的得分主题

发表于 2024-1-23 22:26 | 显示全部楼层
老大搞一个直接函数解决不用定义名称的呗

TA的精华主题

TA的得分主题

发表于 2024-2-7 10:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shaowu459 发表于 2022-12-2 13:03
基础循环和递归层面,确实有点像vba。

太难了 ,也许要把基础打牢点才能看这个吧

TA的精华主题

TA的得分主题

发表于 2024-5-2 07:37 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shaowu459 发表于 2022-12-2 20:51
更新递归的算法,这个效率高的多:

这个写法很难模拟递归过程,这属于双路径递归吗?效率比reduce高了很多,简直逆天,能讲解下他的递归全过程吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-2 09:58 来自手机 | 显示全部楼层
夕阳的刻痕666 发表于 2024-5-2 07:37
这个写法很难模拟递归过程,这属于双路径递归吗?效率比reduce高了很多,简直逆天,能讲解下他的递归全过 ...

这个没法定量的去分析效率了。比如用reduce的话后面vstack用多了运算速度就慢。扣除这些因素后就是递归计算的次数了,基本和速度成线性关系。可以大概画画分支,就知道大概次数的比例了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-2 09:59 来自手机 | 显示全部楼层
橒♂蝣 发表于 2024-1-23 22:26
老大搞一个直接函数解决不用定义名称的呗

可以直接单元格里写递归公式,不用定义名称了。我递归基础那个帖子里放了一个例子,可以参考。

TA的精华主题

TA的得分主题

发表于 2024-5-2 13:02 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
shaowu459 发表于 2024-5-2 09:58
这个没法定量的去分析效率了。比如用reduce的话后面vstack用多了运算速度就慢。扣除这些因素后就是递归计 ...

=LET(f,LAMBDA(g,n,m,IF(m=1,n,IF(m=ROWS(n),TOROW(n),VSTACK(IFNA(HSTACK(@n,g(g,DROP(n,1),m-1)),@n),g(g,DROP(n,1),m))))),f(f,SEQUENCE(5),3))根据你的公式,IFNA(HSTACK(@n,g(g,DROP(n,1),m-1)),@n)这是第一次调用递归,g(g,DROP(n,1),m)这是第二次调用递归,他们之间有没有什么联系?我尝试把它拆分成单递归后再拼接,得到的组合就比正确的少了,这让我感觉费解。希望大佬解惑,在此谢过!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-2 14:47 来自手机 | 显示全部楼层
夕阳的刻痕666 发表于 2024-5-2 13:02
=LET(f,LAMBDA(g,n,m,IF(m=1,n,IF(m=ROWS(n),TOROW(n),VSTACK(IFNA(HSTACK(@n,g(g,DROP(n,1),m-1)),@n),g ...

不是第一次和第二次,是同一层循环时要把两个结果堆起来。拿1-2-3-4-5这五个数字选三举例来说,要vstack(包含第一个数字的5选3结果,去掉第一个数字后5选3的结果),包含第一个数字的5选3结果=hstack(1,去掉1以后数组的4选2结果),因为1已经确定了,所以后面4个数字再选两个就行。这样。一层一层往下。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 23:34 , Processed in 0.047152 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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