请问,为什么IFS不能用于递归,IF却可以

wils
wils

创作者俱乐部成员

如图,IF计算正常,同样逻辑的IFS报错 =LET(f,LAMBDA(x,y,IF(x=0,y,f(x-1,y+1))),f(10,0)) 得出结果10 =LET(f,LAMBDA(x,y,IFS(x=0,y,x<>0,f(x-1,y+1))),f(10,0)) 报错#NUM! 还遇到过在filter里countif报错,countifs正常的情况。。。 谢谢
海南省
浏览 304
收藏
3
分享
3 +1
7
+1
全部评论 7
 
魏朝先
我在 Excel 中测试也是相同的错误。 搜了下有关这个问题的讨论: https://stackoverflow.com/questions/76386362/why-is-the-ifs-formula-not-working-in-a-recursive-lambda-function-in-excel 结论是 IFS 在判断之前会先计算所有结果,然后在判断。也就是说你公式中的 IFS 在无限的递归,直到达到了递归数量限制,返回 #NUM 错误。我试了下把 IFS 换成 SWITCH 也会是相同的错误。
· 江西省
1
回复
wils
wils

创作者俱乐部成员

感谢,新年快乐!
· 广东省
回复
 
谢启龙
学习一下
· 湖北省
回复
 
十一年
从反方向再来看待这个问题 其实吧 即使,IFS内部支持递归调用,意义也不大,没啥价值 表格函数能够支持递归 应该是华而不实 代码写递归,可以写迷宫问题,排列组合问题....一切的递归问题 但是表格函数,估计能写 一些比如 阶乘、斐波拉切数列...简单的问题 而且表格函数写递归,很难体会到递归解决问题的思想
· 黑龙江省
回复
wils
wils

创作者俱乐部成员

其实是在bom展开中发现这个问题的 https://bbs.wps.cn/topic/33380 如帖子中所说,不得不写成嵌套的if,如果能用ifs可以简化一点 另外,公式递归不为了递归问题,只为了实现while循环也是有点意义的,比如在先进先出法核算出库成本时,由于循环的次数并不是一开始就定下的,是个while循环,所以reduce、map之类的不适用,只好用递归实现循环,虽然写出来确实乱的没眼看,但解决问题的思路却是清晰的。。。
· 广东省
回复