嘔心瀝血演算法題——數量週期
阿新 • • 發佈:2018-12-26
// 複雜現象背後的推動力,可能是極其簡單的原理。科學的目標之一就是發現紛 // 繁複雜的自然現象背後的簡單法則。愛因斯坦的相對論是這方面的典範例證。 // 很早的時候,生物學家觀察某區域某種昆蟲的數量(稱為蟲口數)之逐年變化規律, // 就十分迷惑:有的時候是逐漸增多達到一個平衡值。有的時候在兩個數字間週期跳動。 // 有的時候則進入一片混亂,類似隨機數字一樣變化(稱為混沌現象)。 // 慢慢地,人們從數學中更清晰地觀察到了這一現象,並因此開創了:符號動力學、非線性動力學等研究領域。 // 一個著名的蟲口數目簡化模型如下: // 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);