Power Query 生成斐波那契数列

斐波那契数列{0,1,1,2,3,5,8,13,21,34,55,89,。。。}

Power Query 生成斐波那契数列

斐波那契螺旋线,是完美的黄金分割,自然界很多物种都符合这个数列的规律,比如向日葵

Power Query 生成斐波那契数列

再比如海螺:

Power Query 生成斐波那契数列

摄影爱好者拍摄照片时的构图:

Power Query 生成斐波那契数列

斐波那契数列其实很简单,就是0,1开始的数列,每个新值是前面两个值的和。

在Power Query中我们有很多种方法可以构造出这个数列:

List.Accumulate迭代

我们曾讲过用List.Accumulate函数累计求和计算的方法,使用List.Accumulate函数也能构造出斐波那契数列:

Power Query 生成斐波那契数列

= List.Accumulate({0..100},{0,1},(x,y)=>x&{List.Sum(List.LastN(x,2))})

这个公式与昨天的累计求和计算是不是很像,这里我们用了List.Sum(List.LastN(x,2))来计算列表的最后两个值的和,x是一个数值列表,从{0,1}开始,每次增加一个值,就是前两个值的和。

递归

我们先自定义一个函数,根据斐波那契数列的规律,我们写这个函数就是为了计算出每个值。

Power Query 生成斐波那契数列

  • n<=1时,返回结果n
  • n>1时,返回的结果是fx(n-1)+fx(n-2)

Power Query 中递归需要用@引用函数名称。

然后我们来引用这个函数来计算:

Power Query 生成斐波那契数列

= List.Transform({0..10},(x)=>fx(x))

我们得到11个结果,递归公式很耗资源,如果取100个结果,计算速度明显没有迭代的速度快。


分享到:


相關文章: