(Translated by https://www.hiragana.jp/)
迴圈 - 维基百科,自由的百科全书 とべ转到内容ないよう

迴圈

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

迴圈これ计算つくえ科学かがく運算うんざん領域りょういきてき用語ようご,也是いちしゅ常見つねみてきひかえせいりゅうほど。迴圈一段在程式中只出現一次,ただし可能かのうかい連續れんぞく執行しっこうつぎてきほどしき碼。迴圈ちゅうてきほどしき碼會執行しっこう特定とくていてき次數じすうあるもの執行しっこういた特定とくてい條件じょうけん成立せいりつ結束けっそく迴圈,あるものはりたいぼう一集合中的所有項目都執行一次。

ざいいち函數かんすうほどしきげんれいHaskellSchemeちゅうかい使用しよう递归ある动点组合たちいた迴圈てき效果こうか,其中递归いちしゅ特別とくべつてき递归,很容易ようい轉換てんかんため迭代[1]

指定してい執行しっこう次數じすうてき迴圈(for loop)

[编辑]

大部おおぶ份程しきげん提供ていきょう迴圈てき指令しれい以依指定していてきつぎすうじゅうくつがえ執行しっこういちだんほどしき

わか指定していてき次數じすうNしょう於1,ほどしきげんかいゆるがせりゃくせい迴圈執行しっこうわか指定していてき次數じすうNため1,のり迴圈ただかい執行しっこういち

ざい迴圈進行しんこう迴圈计数也會ずいちょ變化へんか大部おおぶ份的ほどしきげん允許いんきょ迴圈计数じょうすうあるすう每次まいじてき變化へんかりょう以是1ある其他不為ふため0てきすう值。

   FOR I = 1 TO N            for I := 1 to N do begin
       xxx                       xxx
   NEXT I                    end;

   DO I = 1,N                for ( I=1; I<=N; ++I ) {
       xxx                       xxx
   END DO                    }

ざい許多きょたほどしきげんちゅう,迴圈计数よう使用しよう整數せいすう才能さいのういたじゅんかくてき結果けっかよし於硬たいてききりせいざい迴圈计数使用しよう浮點すうとき結果けっか可能かのうかいあずか,如以てき迴圈

   for X := 0.1 step 0.1 to 1.0 do

四捨五入ししゃごにゅうてき誤差ごさかたからだ及編やくてき差異さい一定いっていかい執行しっこう10可能かのうただかい執行しっこう9。而且Xてきすう值可能會のうかいゆう些誤あずかてき0.1, 0.2, 0.3, ..., 1.0。

指定してい條件じょうけんてき迴圈(while loop/doWhile loop)

[编辑]

だい多數たすうてきほどしきげんゆう指令しれい以在特定とくてい條件じょうけん成立せいりつ繼續けいぞく迴圈てき進行しんこうある特定とくてい條件じょうけん不成立ふせいりつ繼續けいぞく迴圈てき進行しんこう進行しんこういた特定とくてい條件じょうけん成立せいりつためどめ前者ぜんしゃ一般いっぱんかい標示ひょうじwhile,後者こうしゃ一般いっぱんかい標示ひょうじuntil。

判斷はんだん條件じょうけん可能かのうざい迴圈いち開始かいし進行しんこうあるざい迴圈最後さいござい進行しんこう前者ぜんしゃてき迴圈一定いっていかい執行しっこう,而後しゃ1てき迴圈いたりしょうかい執行しっこういち

   DO WHILE (test)           repeat 
       xxx                       xxx 
   LOOP                      until test;

   while (test) {            do
       xxx                       xxx
   }                         while (test);

指定してい集合しゅうごうてき迴圈

[编辑]

許多きょたほどしきげん支援しえんいちしゅ特別とくべつてき迴圈,以針たいいち陣列じんれつちゅうてき元素げんそある一個集合中的所有成員進行迴圈中的指令,包括ほうかつAdaDげんSmalltalkPerlC#Visual BasicRubyPythonJavaJavaScriptFortran 95とうほどしきげんゆう這類てき迴圈結構けっこう

   someCollection do: [:eachElement |xxx].

   foreach (item; myCollection) { xxx }

   foreach someArray { xxx }

   Collection<String> coll; for (String s : coll) {}

   foreach (string s in myStringCollection) { xxx }

   $someCollection | ForEach-Object { $_ }
   
   forall ( index = first:last:step... )

泛用迴圈結構けっこう

[编辑]

ゆう些程しきげんゆう泛用迴圈結構けっこう以用らい表示ひょうじ指定してい次數じすうある指定してい條件じょうけんてき迴圈,ぞうCげんてきfor指令しれいあるCommon Lispかたりごとちゅうてきdo指令しれい這類てきれいためりょうほどしきてき可讀かどくせい考量こうりょうざい這些ほどしきげんちゅうかえ儘量使用しよう一些含義較明確的指令(如while指令しれい)。

無窮むきゅう迴圈

[编辑]

無窮むきゅう迴圈一般會用在有一段程式需要永遠執行,ある該程しきざいぼつゆう發生はっせい特殊とくしゅ事件じけん(如故障こしょう需要じゅよう永遠えいえん執行しっこうてき場合ばあいれい如一個事件驅動的程式需要持續執行迴圈,處理しょり發生はっせいてき事件じけんちょくいた使用しようしゃ結束けっそくある中斷ちゅうだんほどしきためどめ

わかざい指定してい條件じょうけんてき迴圈ちゅう,其判斷はんだん條件じょうけんよういたてき變數へんすうすう永遠えいえんかい改變かいへん,這種ほどしき錯誤さくご也會使とく此迴けん變成へんせい無窮むきゅう迴圈。

ひさげ結束けっそくせい迴圈

[编辑]

とう使用しよう指定してい次數じすうてき迴圈查表かい希望きぼうざい查到需要じゅようてき資料しりょう就可以直接ちょくせつ結束けっそく迴圈てき進行しんこうゆう些程しきげん以用breakあるexitてき指令しれいたちいた這様てきこうのう,這些指令しれいかい結束けっそく這個迴圈,せっちょかい執行しっこう迴圈めんてき指令しれいわか此迴けんざいふくほどしきちゅう,也可以用return中斷ちゅうだん迴圈てき進行しんこう同時どうじはなれひらきふくほどしき

以下いかAdaほどしきげんてきいちはんれい利用りようexit ... when...てき方式ほうしきちゅうひっさげ結束けっそく迴圈。

with Ada.Text IO;
with Ada.Integer Text IO;

procedure Print_Squares is 
    X : Integer;
begin
    Read_Data : loop
        Ada.Integer Text IO.Get(X);
    exit Read_Data when X = 0;
        Ada.Text IO.Put (X * X);
        Ada.Text IO.New_Line;
    end loop Read_Data;
end Print_Squares;

Python支援しえんいち特別とくべつてき條件じょうけん判斷はんだんしき根據こんきょ最近さいきん使用しよう迴圈曾用breakひさげ結束けっそく而做不同ふどうてき處理しょり,舉例如下:

for n in set_of_numbers:
    if isprime(n):
        print "Set contains a prime number"
        break
else:
    print "Set did not contain any prime numbers"

うえれいちゅうてきelsefor迴圈てき一部いちぶ份,內層ifかたまりてき一部いちぶ份。Pythonげんてきfor迴圈及while 迴圈支援しえんelseとう迴圈ぼつ有用ゆうようbreakひさげ結束けっそく就會執行しっこう

迴圈てき特殊とくしゅ指令しれい

[编辑]

ゆうざい使用しよう迴圈てきほどしきちゅうかい希望きぼうざい特定とくていじょうがたとべ目前もくぜん迴圈かたまりてき指令しれいかいいた迴圈開始かいし執行しっこういち迴圈,一般這類的指令會命名為continueskipあるnext,其效果こうかひさげ結束けっそく這次迴圈てき進行しんこう繼續けいぞく進行しんこういち迴圈,わか此迴けんやめけい最後さいごいち執行しっこう,這類指令しれいかい結束けっそく迴圈てき進行しんこう繼續けいぞく進行しんこう後續こうぞくてき指令しれい

ぞうPerl及Rubyとうほどしきげんゆうredo指令しれい以重しん執行しっこう目前もくぜんてき迴圈,わかざい指定してい次數じすうてき迴圈ちゅう,其迴けん計數けいすうてきすう值不かい變化へんか。Rubyほどしきげんゆうretry指令しれい以讓迴圈計數けいすうかいいたはつ值,じゅうしん執行しっこうせい迴圈。

迴圈へんしき及迴けん不變ふへんしき

[编辑]

迴圈へんしきえいLoop variant迴圈不變ふへんしき判斷はんだん迴圈正確せいかくせいてき工具こうぐ[2]

迴圈へんしき一個初值不為負的整數表示式,ざい每次まいじ執行しっこう迴圈迴圈へんしきてきすう值需減少げんしょうただしざい正常せいじょうてき迴圈執行しっこう過程かていちゅう迴圈へんしきてきすう值不かい變成へんせい值。迴圈へんしきようらい確保かくほ迴圈かい結束けっそく

迴圈不變ふへんしき一個和迴圈有關的判斷式,ざいだいいち進入しんにゅう迴圈まえ,迴圈不變ふへんしきてき值需為真ためざにざい後續こうぞくごといち執行しっこう迴圈,其值也要為真ためざにとう迴圈正確せいかくてき結束けっそく,其終止しゅうし條件じょうけん迴圈不變ふへんしき都會とかい成立せいりつ。迴圈不變ふへんしき可用かようらいかんひかえざい迴圈進行しんこうぼういち指定してい性質せいしつてき狀態じょうたい

ぞうEiffelこれるいてきほどしきげん本身ほんみ就有支援しえん迴圈へんしき及迴けん不變ふへんしき,其他げん可能かのう需要じゅようゆう附加ふかもとけん才能さいのう支持しじ此功のうれいJava就需よう配合はいごうJavaけんげんえいJava Modeling Language規範きはんてきloop statements页面そん档备份そん互联网档あん才能さいのう支持しじ機能きのう

不同ふどうげんてき迴圈比較ひかくひょう

[编辑]
ほどしきげん 條件じょうけん判斷はんだんしき 迴圈 early exit continuation redo retry 正確せいかくせい判斷はんだんせい
迴圈けいはじめ 迴圈中間ちゅうかん 迴圈結尾けつび 指定してい次數じすう 指定してい集合しゅうごう 泛用 無窮むきゅう[1] 迴圈へんしき 迴圈不變ふへんしき
Ada これ これ これ これ ただはりたい陣列じんれつ いや これ 多層たそう迴圈 いや
C これ いや これ いや [2] いや これ いや 多層たそう迴圈 [3] 多層たそう迴圈 [3] いや
C++ これ いや これ いや [2] これ これ いや 多層たそう迴圈 [3] 多層たそう迴圈 [3] いや
C# これ いや これ いや [2] これ これ いや 多層たそう迴圈 [3] 多層たそう迴圈 [3]
Common Lisp これ これ これ これ これ これ これ 多層たそう迴圈 いや
Eiffel これ いや いや これ [10] これ これ いや 一層いっそう迴圈 [10] いや いや いや [11] これ これ
F# これ いや いや これ これ いや いや いや [6] いや いや
FORTRAN 77 これ いや いや これ いや いや いや 一層いっそう迴圈 これ
FORTRAN 90 これ いや いや これ いや いや これ 多層たそう迴圈 これ
FORTRAN 95後續こうぞく版本はんぽん これ いや いや これ 陣列じんれつ いや これ 多層たそう迴圈 これ
Haskell いや いや いや いや これ いや これ いや [6] いや いや
Java これ いや これ いや [2] これ これ いや 多層たそう迴圈 多層たそう迴圈 いや 原生げんせい(non-native) [12] 原生げんせい(non-native) [12]
JavaScript これ いや これ いや [2] これ これ いや 多層たそう迴圈 多層たそう迴圈 いや
OCaml これ いや いや これ 陣列じんれつ及列ひょう(list) いや いや いや [6] いや いや
PHP これ いや これ いや [2] [5] これ [4] これ いや 多層たそう迴圈 多層たそう迴圈 いや
Perl これ いや これ いや [2] [5] これ これ いや 多層たそう迴圈 多層たそう迴圈 これ
Python これ いや いや いや [5] これ いや いや 多層たそう迴圈 [6] 多層たそう迴圈 [6] いや
REBOL いや [7] これ これ これ これ いや [8] これ 一層いっそう迴圈 [6] いや いや
Ruby これ いや これ これ これ いや これ 多層たそう迴圈 [6] 多層たそう迴圈 [6] これ これ
Standard ML これ いや いや いや 陣列じんれつれつひょう(list) いや いや いや [6] いや いや
Visual Basic .NET これ いや これ これ これ いや これ まいたね迴圈いちそう まいたね迴圈いちそう
Windows PowerShell これ いや これ いや [2] これ これ いや ? これ
  1. a 此項ただ考慮こうりょ專用せんようてき無窮むきゅう迴圈ほどしき結構けっこういんwhile (true)for ( ; ; )さんざい內。
  2. a b c d e f g h Cげんてきfor (init; test; increment)迴圈いち通用つうようてき迴圈指令しれい累加るいかりょう也不一定いっていようため1。
  3. a b c ざいC、C++及C#ちゅうとべ多層たそう迴圈以用labelgoto指令しれいたちいた
  4. a ざいPHP 5ちゅうやめ支援しえん页面そん档备份そん互联网档あん配合はいごう物件ぶっけんてき迴圈。
  5. a b c 指定してい次數じすうてき迴圈以用おもくつがえincrementing listあるgeneratorてき方式ほうしきらいたちいた效果こうかれい如Pythonちゅうてきrange()
  6. a b c d e 以用异常处理らいとべ多層たそう迴圈。
  7. a ぼつゆう專門せんもん指令しれいただしwhile指令しれい以用さく用途ようと
  8. a ぼつゆう專門せんもん指令しれいただし使用しようしゃ定義ていぎ通用つうよう迴圈指令しれい
  9. a せいざいけい劃的C++0x標準ひょうじゅんちゅうやめ加入かにゅう範圍はんいため基礎きそてき for 迴圈标准ばん(STL)中有ちゅううstd::for_eachばん函數かんすう以對STL容器ようき(container)てきまい元素げんそ重複じゅうふくよびさけべいちいちげん函數かんすう[3]製作せいさくSTL容器ようきてききょしゅう也可以達いた類似るいじてき效果こうか[4]
  10. a 利用りよう整數せいすう區間くかんてき迭代以達いた指定してい次數じすう迴圈てき效果こうか, early exit以用增加ぞうかいちexitてき條件じょうけんらい達成たっせい
  11. a Eiffel支援しえん保留ほりゅうretryようざいちぎり约式设计てき異常いじょう處理しょり迴圈てきりゅうほどひかえせい指令しれい
  12. a 需要じゅよう配合はいごうJavaけん语言えいJava Modeling Language(JML)。

參考さんこう資料しりょう

[编辑]
  1. ^ arun_yh. 循环(loop), 递归(recursion), あまね历(traversal), 迭代(iterate)いくわ别 - arun_yh - ひろしきゃく. www.cnblogs.com. ひろしきゃく园. [2017-03-09]. (原始げんし内容ないようそん档于2017-03-12) ちゅうぶん中国ちゅうごくだい陆)). 
  2. ^ Meyer, Bertrand. Eiffel: The Language. Prentice Hall. 1991: 129~131. 
  3. ^ for_each页面そん档备份そん互联网档あん). Sgi.com. Retrieved on 2010-11-09.
  4. ^ Chapter 1. Boost.Foreach页面そん档备份そん互联网档あん). Boost-sandbox.sourceforge.net (2009-12-19). Retrieved on 2010-11-09.