用WPS新公式LET和LAMBDA写循环的小套路
wils
创作者俱乐部成员
有些时候for循环很方便,在公式里大概可以这样写:
=LET(f,LAMBDA(x,y,IF(x=0,DROP(y,1),f(x-1,VSTACK(y,x)))),f(5,""))
这一句是生成等差数列,平时用数组公式或自动填充都能解决,这里只是演示循环:
定义一个函数f,带两个参数x和y,x用来存储状态的变化(类似for i in range这里的i),y用来存储结果的数组(类似尾递归优化时把每一步的结果存入参数列表,保证栈不会无限增长)
函数f的结构是,参数x,参数y,如果状态x达到终点比如这里等于0,那么直接返回结果y,否则y再次调用f递归的变化(可以考虑广度或深度优先搜索)
所以上面这一句里,let f lambda x y if这几个地方都是固定的套路,只有vstack这里是真正的逻辑
总的意思是说,从5开始逐步减1,每次把这个数加入结果数组,所以应该输出{5;4;3;2;1}这样一个数组,也就大概这个意思
for i in range(5,0,-1):
ret.append(i)
drop和初始参数""是为了vstack不报错,没啥意义。。。
如果感兴趣,可以用这个套路嵌套着写递归,比如排列组合问题
创作者俱乐部成员
WPS寻令官
WPS函数专家