五个猴子分桃用matlab怎么做,Power Query五猴分桃问题(续):递归

原标题:Power Query五猴分桃问题(续):递归

五猴分桃我们自定义了两个函数来做判断,第一个函数是分桃子的规律:

503c8c44fe61173e0abcabe4c6dbfe36.png

第二个函数是分桃子的过程:

915159fdefcf125984f6624384f0d8e8.png

如果只有五个猴子倒也没什么,这样来写还比较简单,直接,但是如果问题改变了,10个猴子,100个猴子来分怎么办?

这就是今天我们的问题,解决这个问题的办法,就是递归,像上面完全相同的函数嵌套使用,就可以使用递归的方法来解决。

c765c7156f6261bbe4b80f0438953ea5.png

第一个猴子拿完剩下的桃子,是第二个猴子的参数,记住这个,一会我们写递归时会用到。

54f6be740de616e1c2967642d10d8932.png

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个猴子的情况:

6babd23064ae7b9d9f4b9cce2591549a.png

结果与我们昨天计算的结果是一样的。

我们来计算一个6个猴子的情况:

a43a23045fe7a021e042d89610ba7094.png

最少要46651个桃子才够6个猴子这样来分,100万中有21个数据符合要求。

我们来总结一下Power Query的递归:

@引用函数本体

需要一个控制递归次数的参数,以及控制条件

函数本体写在then后

递归引用写在else后

用引用本体函数作为参数,重写一遍函数

更多Power Query知识请参考:返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值