W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們可以使用while語句重寫countdown函數(shù):
void countdown (int n) {
while (n > 0) {
cout << n << endl;
n = n-1;
}
cout << "Blastoff!" << endl;
}
你幾乎可以像閱讀英語一樣閱讀while語句。這段代碼的含義是:當n大于0時,繼續(xù)顯示n的值,然后將n減少1;當n變?yōu)?時,輸出單詞“Blastoff!”。
while語句執(zhí)行流程的更正式的描述如下:
這類流程成為循環(huán),因為第3步會回到起點。注意,如果初次進入循環(huán)判斷條件為false,循環(huán)內(nèi)的語句將不會執(zhí)行。循環(huán)內(nèi)的語句成為循環(huán)體。
循環(huán)體應(yīng)改變一個或多個變量的值,使循環(huán)條件最終能變?yōu)閒alse,以結(jié)束循環(huán)。反之,循環(huán)將永遠反復(fù)執(zhí)行,這種情形稱為無限循環(huán)。本著娛樂無限的精神,計算機科學家發(fā)現(xiàn)下面這個洗發(fā)指導(dǎo)步驟是一個無限循環(huán):抹洗發(fā)水,清洗,然后重復(fù)。
在countdown這個例子中,我們可以證明循環(huán)會結(jié)束,因為已知n的值是有限的,而且我們看到n在每次循環(huán)(迭代)后都會減小,所以最終n的值會變?yōu)?。另外一個例子就不好說了:
void sequence (int n) {
while (n != 1) {
cout << n << endl;
if (n%2 == 0) { // n為偶數(shù)
n = n / 2;
} else { // n為奇數(shù)
n = n*3 + 1;
}
}
}
循環(huán)條件是n!=1,因而循環(huán)將持續(xù)下去,直到n變?yōu)?,是條件為false。
每一次迭代,程序輸出n的值,然后檢查n是奇數(shù)還是偶數(shù);如果是偶數(shù),則n的值要除以2;如果是奇數(shù),則n的值用3n+1取代。舉個例子,如果循環(huán)初值(作為參數(shù)傳給sequence)為3,結(jié)果序列就是3、10、5、16、8、4、2、1。
由于n或增或減,并沒有明顯證據(jù)能證明n一定會變到1,或者說程序會結(jié)束。對于n的某些特定值,我們可以證明程序會結(jié)束。例如,如果初值是2的冪,則n的值每次循環(huán)結(jié)果都是偶數(shù),最終會變到1。前面的例子,初值是16,程序就在輸出一個序列后結(jié)束。
不考慮特定值,我們是否能證明程序?qū)τ趎的所有值都能結(jié)束?這個問題很有趣。到目前為止,沒有人能夠證明之,但也沒有人能推翻之!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: