程式循環

程式循環

程式循環是計算機科學運算領域的用語,也是一種常見的控制流程。循環是一段在程式中只出現一次,但可能會連續運行多次的代碼。循環中的代碼會運行特定的次數,或者是運行到特定條件成立時結束循環,或者是針對某一集合中的所有項目都運行一次。

在一些函式程式語言(例如Haskell和Scheme)中會使用遞歸或不動點組合子來達到循環的效果,其中尾部遞歸是一種特別的遞歸,很容易轉換為疊代。

基本介紹

  • 中文名:程式循環 
  • 定義:計算機科學運算領域的用語,也是一種常見的控制流程
  • 類型:經濟術語
分類,變式與不變式,

分類

指定運行次數的循環
大部分程式語言都提供循環的指令,可以依指定的次數重複運行一段程式。若指定的次數N小於1,程式語言會忽略整個循環不去運行,若指定的次數N為1,則循環只會運行一次。在循環進行時,循環計數器也會隨著變化,大部分的程式語言可以允許循環計數器上數或是下數,每次的變化量可以是1或是其他不為0的數值。
指定條件的循環
大多數的程式語言都有指令,可以在特定條件成立時繼續循環的進行,或是特定條件不成立時繼續循環的進行,進行到特定條件成立為止。前者一般會標示while,後者一般會標示until。其判斷條件可能在循環一開始就進行,或是在循環最後才進行。前者的循環不一定會運行,而後者1的循環至少會運行一次。
指定集合的循環
許多程式語言支持一種特別的循環,可以針對一個數組中的元素或是一個集合中的所有成員進行循環中的指令,包括Ada、D語言、Smalltalk、PerlJava、C#、Visual BasicRubyPython、JavaScript、Fortran 95等程式語言都有這類的循環結構。
泛用循環結構
有些程式語言有泛用循環結構,可以用來表示指定次數或指定條件的循環,像C語言的for指令或是Common Lisp語言中的do指令都是這類的例子,不過為了程式的可讀性考量,在這些程式語言中還是儘量使用一些含義較明確的指令(如while指令)。
死循環
死循環一般會用在有一段程式需要永遠運行,或是該程式在沒有發生特殊事件(如故障)時需要永遠運行的場合,例如一個事件驅動的程式需要持續運行循環,處理髮生的事件,直到用戶結束或中斷程式為止。若在指定條件的循環中,其判斷條件用到的變數數值永遠不會改變,這種程式錯誤也會使得此循環變成死循環。
提早結束整個循環
當使用指定次數的循環查表時,會希望在查到需要的數據時就可以直接結束循環的進行,有些程式語言可以用break或exit的指令達到這様的功能,這些指令會結束這個循環,接著會運行循環後面的指令。若此循環在副程式中,也可以用return中斷循環的進行,同時離開副程式。
循環的特殊指令
有時在使用循環的程式中會希望在特定情形下跳過目前循環區塊的指令,回到循環開始運行下一個循環,一般這類的指令會命名為continue、skip或next,其效果是提早結束這次循環的進行,繼續進行下一個循環,若此循環已經是最後一次運行,這類指令會結束循環的進行,繼續進行後續的指令。
像Perl及Ruby等程式語言有redo指令,可以重新運行目前的循環,若在指定次數的循環中,其循環計數器的數值不會變化。Ruby程式語言有retry指令,可以讓循環計數器回到初值,重新運行整個循環。

變式與不變式

循環變式(Loop variant)及循環不變式(Loop invariant)是判斷循環正確性的工具。循環變式是一個初值不為負的整數表示式,在每次運行循環時循環變式的數值需減少,但在正常的循環運行過程中循環變式的數值不會變成負值。循環變式用來確保循環會結束。 循環不變式是一個和循環有關的判斷式,在第一次進入循環之前,循環不變式的值需為真,在後續每一次運行循環時,其值也要為真。當循環正確的結束時,其終止條件和循環不變式都會成立。循環不變式可用來監控在循環進行時,某一指定性質的狀態。
像是Eiffel之類的程式語言本身就有支持循環變式及循環不變式,其他語言可能需要有附加組件才能支持此功能,例如Java就需要配合Java建模語言(Java Modeling Language)規範的loop statements才能支持此機能。

相關詞條

熱門詞條

聯絡我們