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個結果,計算速度明顯沒有迭代的速度快。


分享到:


相關文章: