斐波那契數列{0,1,1,2,3,5,8,13,21,34,55,89,。。。}
斐波那契螺旋線,是完美的黃金分割,自然界很多物種都符合這個數列的規律,比如向日葵
再比如海螺:
攝影愛好者拍攝照片時的構圖:
斐波那契數列其實很簡單,就是0,1開始的數列,每個新值是前面兩個值的和。
在Power Query中我們有很多種方法可以構造出這個數列:
List.Accumulate迭代
我們曾講過用List.Accumulate函數累計求和計算的方法,使用List.Accumulate函數也能構造出斐波那契數列:
= List.Accumulate({0..100},{0,1},(x,y)=>x&{List.Sum(List.LastN(x,2))})
這個公式與昨天的累計求和計算是不是很像,這裡我們用了List.Sum(List.LastN(x,2))來計算列表的最後兩個值的和,x是一個數值列表,從{0,1}開始,每次增加一個值,就是前兩個值的和。
遞歸
我們先自定義一個函數,根據斐波那契數列的規律,我們寫這個函數就是為了計算出每個值。
- n<=1時,返回結果n
- n>1時,返回的結果是fx(n-1)+fx(n-2)
Power Query 中遞歸需要用@引用函數名稱。
然後我們來引用這個函數來計算:
= List.Transform({0..10},(x)=>fx(x))
我們得到11個結果,遞歸公式很耗資源,如果取100個結果,計算速度明顯沒有迭代的速度快。
閱讀更多 EXCEL數據處理與分析 的文章