1. 程式人生 > >嘔心瀝血演算法題——數量週期

嘔心瀝血演算法題——數量週期

// 複雜現象背後的推動力,可能是極其簡單的原理。科學的目標之一就是發現紛
// 繁複雜的自然現象背後的簡單法則。愛因斯坦的相對論是這方面的典範例證。
// 很早的時候,生物學家觀察某區域某種昆蟲的數量(稱為蟲口數)之逐年變化規律,
// 就十分迷惑:有的時候是逐漸增多達到一個平衡值。有的時候在兩個數字間週期跳動。
// 有的時候則進入一片混亂,類似隨機數字一樣變化(稱為混沌現象)。
// 慢慢地,人們從數學中更清晰地觀察到了這一現象,並因此開創了:符號動力學、非線性動力學等研究領域。
// 一個著名的蟲口數目簡化模型如下:
// x' = x * (1 - x) * r
// 這裡,x  x' r 都是浮點數。
// 其中,x 表示當年的蟲口數,x' 表示下一年的蟲口數。
// 它們的取值範圍在 0 與 1 之間,實際上表示的是:蟲口的總數佔環境所能支援的最大數量的比率。
// r 是常數(環境引數),r的取值範圍在 [0,4]。
// 令人驚訝的是:這個簡單的迭代公式有著不同尋常的神祕性質!
// 一般來說,多次迭代後,蟲口數的穩定模式與x的初始值無關,而與 r 有關!
// 例如:無論x初始值是多少,當 r = 2.5 的時候,x 多次迭代後會趨向於 0.6。
// 而當 r = 3.2 的時候,x 的值會趨向於在 0.799 與 0.513 之間週期性擺動。
// 那麼,r = 3.62 的時候,你觀察到有什麼週期現象發生嗎?

let count = 100;

function f(x, r) {
   if (count == 0) {
      return;
   }
   x = (x - x * x) * r;
   console.log(x);
   count--;
   f(x, r);
}

f(0.2, 3.62);