Normal
0
false
false
false
EN-US
ZH-CN
X-NONE
法布爾的松毛蟲圓圈和死循環
法國的法布爾是個昆蟲的觀察大師,不過,他的生物理論水平很低。他曾經用自己想到的例子,挖苦達爾文的演化論。不過,他實在沒有理解達爾文理論的硬核部分。
他有一篇專門描述松毛蟲行為的文章。我簡單敘述如下。
松毛蟲行走時,一定排出單列縱隊。最前面的一隻是領隊的。領隊的選取是隨機的。每隻松毛蟲走時吐出很細的絲線,後面的就頭頂著前面的尾,沿著地上的絲線行走。就是兩隻松毛蟲也一定遵循同樣的規則。只有前面的那隻領隊的,走時,經常要四處探頭,尋找路線,後面的只跟著前面的尾巴就行了。
松毛蟲隊伍絕對不會原地後轉,沿著絲線路往回走。
一天,法布爾在院里花盆下面的一隊松毛蟲爬上了花盆。法布爾決定作一實驗。當松毛蟲隊伍沿著花盆行走,隊伍在沿上形成一個閉合的圓圈時,他用毛刷子把後面多餘的毛蟲掃掉。這樣,每隻松毛蟲都認為自己不是領隊的,緊跟著前面的尾巴前進。
松毛蟲的行走規則就是:跟著前面的尾巴,一直前進。
計算機程序中,一個循環程序,如果設定的跳出循環的條件永遠無法滿足,那麼,該循環就永遠循環下去,沒有停止的可能。俺曾故意編造了這樣的程序,為了顯示程序在運行,比方設計其運行結果是要輸出某種數值,一運行該程序,發現計算機顯示屏上,數據一閃而過,像流水一樣,飛速前進,永無止境。這就是計算機進入了死循環的結果。要想停止該程序的運行,必須強制中斷運行,就是「殺死」該程序。
那麼,松毛蟲的死循環會怎樣結束?
松毛蟲隊伍第一天里走了十幾個小時,不停止。晚上,溫度低,松毛蟲累了,時走時停。最後,捲曲了身子,停下取暖。第二天,溫度上升了,松毛蟲隊伍再次轉圓圈。
第三天,松毛蟲和第二天一樣轉圓圈。不過,晚間很冷,盆沿上的毛蟲分成兩堆,擠在一起取暖。
第四天,幾乎還是一樣的。
後來的一天,晚間很冷,松毛蟲擠在一起,有幾隻被擠出了花盆沿。那幾隻跟著一位新領袖,下去了。餘下的毛蟲,仍然在轉圓圈。因為少了7只毛蟲,毛蟲隊伍在花盆沿上不再是一個圓圈,有了缺口。這樣,毛蟲隊伍就有了一個領隊的。
在實驗的第八天,天氣很熱,毛蟲隊伍在領隊的帶領下,離開了那條絲線圓圈,下到了盆底下。最後,回到了毛蟲巢里。
毛蟲不是機器,總會打破規則,最後才衝破了死循環,回到了家裡。
法布爾估算了一下,那隊松毛蟲大概共走了48小時,行進了250米左右。不過,他的實驗也證實了,毛蟲在8天的時間裡,沒有吃任何食物和水,也沒有餓死。
計算機進入了死循環后,永遠運行,最後的結果會怎樣?應當是在相當的長的時間裡,某部分硬體壞掉,程序停止。或者,硬體沒壞,但程序自己癱瘓了。
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}