原标题:Power Query五猴分桃问题(续):递归
五猴分桃我们自定义了两个函数来做判断,第一个函数是分桃子的规律:
第二个函数是分桃子的过程:
如果只有五个猴子倒也没什么,这样来写还比较简单,直接,但是如果问题改变了,10个猴子,100个猴子来分怎么办?
这就是今天我们的问题,解决这个问题的办法,就是递归,像上面完全相同的函数嵌套使用,就可以使用递归的方法来解决。
第一个猴子拿完剩下的桃子,是第二个猴子的参数,记住这个,一会我们写递归时会用到。
let
xy= (x,y,z)=>if y=1 then x-(x-1)/z-1 else @xy(x,y-1,z)-(@xy(x,y-1,z)-1)/z-1
in
xy
这里我们用了3个参数:
x:桃子个数
y:递归次数,分桃子的次数
z:猴子个数
y=1时是函数的本体:x-(x-1)/z-1
else对应的递归引用:@xy(x,y-1,z)-(@xy(x,y-1,z)-1)/z-1
其实就是用@xy(x,y-1,z)来替换了x
函数的结构还是一样的。
在Power Query中函数引用自身定义,需要用@来引用,好像我们在聊天时@朋友一样。
先来检验一下5个猴子的情况:
结果与我们昨天计算的结果是一样的。
我们来计算一个6个猴子的情况:
最少要46651个桃子才够6个猴子这样来分,100万中有21个数据符合要求。
我们来总结一下Power Query的递归:
@引用函数本体
需要一个控制递归次数的参数,以及控制条件
函数本体写在then后
递归引用写在else后
用引用本体函数作为参数,重写一遍函数
更多Power Query知识请参考:返回搜狐,查看更多
责任编辑: