ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 成本计算递归求解产品的总成本

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-10 09:50 | 显示全部楼层
飞天篮球猪 发表于 2024-3-10 09:40
大佬,这样递归了多少次?(12次还是16次)
A002和A001有重复的分支,实际上A001遍历完之后,很多中间件 ...

大佬考虑的很周全,如果是针对单个产品的(不存在重叠子问题),但按题目要求求所有产品(包括中间件),因为最后一行是循环取数的,所以存在重叠子问题。

TA的精华主题

TA的得分主题

发表于 2024-3-10 10:03 | 显示全部楼层
wodewan 发表于 2024-3-10 09:50
大佬考虑的很周全,如果是针对单个产品的(不存在重叠子问题),但按题目要求求所有产品(包括中间件), ...

口算了一下   单个产品比如只计算A001,应该是8次,所以单独计算A002也是8次,这样就是16次
如果在计算A002的时候利用A001时已经算好的中间件,可以减少B001这个分支的4次。
这种BOM往往很多分支,能减少中间过程递归会对效率有助益。不知道对不对,哈哈。

TA的精华主题

TA的得分主题

发表于 2024-3-10 11:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 Again123456 于 2024-3-10 11:13 编辑
飞天篮球猪 发表于 2024-3-10 10:03
口算了一下   单个产品比如只计算A001,应该是8次,所以单独计算A002也是8次,这样就是16次
如 ...

我也想过这个问题,一开始以为要倒了算。

TA的精华主题

TA的得分主题

发表于 2024-3-10 11:44 | 显示全部楼层
Again123456 发表于 2024-3-10 11:12
我也想过这个问题,一开始以为要倒了算。

JS可以"备忘录递归",设定一个全局变量Cache={},用于存储中间件的结果,也可以当成最终结果。
这样的话A001计算完之后,A001这条路径上的所有分支都记录在Cache里了,当计算A002的时候,一样的分支可以直接在Cache里引用得到,不用再递归一遍。供参考....

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-11 09:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
飞天篮球猪 发表于 2024-3-10 11:44
JS可以"备忘录递归",设定一个全局变量Cache={},用于存储中间件的结果,也可以当成最终结果。
这样的话 ...

image.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-11 09:59 | 显示全部楼层

大佬,是不是只要遍历产品中的两个顶级就可以了A001和A002? 然后dic就是结果了。

TA的精华主题

TA的得分主题

发表于 2024-3-11 10:31 | 显示全部楼层
飞天篮球猪 发表于 2024-3-10 11:44
JS可以"备忘录递归",设定一个全局变量Cache={},用于存储中间件的结果,也可以当成最终结果。
这样的话 ...

意思是不是python里的@functools.cache装饰器

TA的精华主题

TA的得分主题

发表于 2024-3-11 10:33 | 显示全部楼层
飞天篮球猪 发表于 2024-3-11 09:59
大佬,是不是只要遍历产品中的两个顶级就可以了A001和A002? 然后dic就是结果了。

是的

image.jpg

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-3-11 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wanghan519 发表于 2024-3-11 10:31
意思是不是python里的@functools.cache装饰器

大佬,python我不会。但python肯定可以写备忘录递归,主要是用来减少子过程的重复。相当于是剪枝了。
只要能设定全局变量的,都可以写。

TA的精华主题

TA的得分主题

发表于 2024-3-11 10:45 | 显示全部楼层
wanghan519 发表于 2024-3-11 10:31
意思是不是python里的@functools.cache装饰器

其实就是个用个字典记录每层递归的结果(也就是每层栈函数调用的结果),好像也叫什么记忆化搜索,因为递归可能存在重复的子问题,这样搜过的就不用搜了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-2-2 02:42 , Processed in 0.028168 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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