當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 中興文檔
[導(dǎo)讀]當(dāng)我們想要寫(xiě)一個(gè)循環(huán)體,期望執(zhí)行10次的時(shí)候,我們會(huì)使用以下方式: for?(int?i=0;?i<10;?i++){ } 可以看到,為了保證循環(huán)10次,我們定義了一個(gè)整數(shù)變量從0開(kāi)始,然后循環(huán)10次,結(jié)束條件是i < 10。 其實(shí)這個(gè)本質(zhì)就是使用了 0 ≤ i < 10 這種表達(dá)形式。 之所

當(dāng)我們想要寫(xiě)一個(gè)循環(huán)體,期望執(zhí)行10次的時(shí)候,我們會(huì)使用以下方式:
for (int i=0; i<10; i++){

}
可以看到,為了保證循環(huán)10次,我們定義了一個(gè)整數(shù)變量從0開(kāi)始,然后循環(huán)10次,結(jié)束條件是i < 10。
其實(shí)這個(gè)本質(zhì)就是使用了 0 ≤ i < 10 這種表達(dá)形式。
之所以很多人都這么寫(xiě),有一個(gè)最主要的原因就是剛開(kāi)始學(xué)編程的時(shí)候,老師都是這么教的…

關(guān)于這個(gè)問(wèn)題,其實(shí)還有一位偉大的數(shù)學(xué)家曾經(jīng)討論過(guò)他的合理性。

這個(gè)人就是Dijkstra,他也是離散數(shù)學(xué)中應(yīng)用廣泛的最短路徑算法的提出者,并且還提出了銀行家算法。

他在1982年發(fā)表了一篇說(shuō)明《Why numbering should start at zero》,這里面有部分內(nèi)容闡述了這個(gè)觀點(diǎn)。

他首先提出一個(gè)問(wèn)題,讓我們通過(guò)一個(gè)條件表達(dá)式表示 2,3,4,5,6,7,8,9,10,11,12 這11個(gè)數(shù)字,其實(shí)一般有以下四種寫(xiě)法:

  • a) 2 ≤ i < 13

  • b) 1 < i ≤ 12

  • c) 2 ≤ i ≤ 12

  • d) 1 < i < 13

這幾種也是我們?cè)趯?xiě)for循環(huán)的時(shí)候可能會(huì)用到的一些表示式,那這四種寫(xiě)法有沒(méi)有好壞之分呢?

答案是有的。

我們其實(shí)可以觀察到,a) 和 b)有個(gè)優(yōu)點(diǎn),上下邊界的相減得到的差,正好等于子序列的長(zhǎng)度,即 13-2 = 12-1 = 11 ; 這樣的寫(xiě)法可以讓我們快速知道這個(gè)表示表達(dá)式中一共包含多少個(gè)自然數(shù)。
當(dāng)然,這并不是正菜,只是開(kāi)胃而已…
接下來(lái),Dijkstra分別從表達(dá)式的上下界討論了到底使用 還是 < 更合理。
首先,他論證了一下表達(dá)式的下界使用哪種形式合理。
他認(rèn)為,當(dāng)我們想要表達(dá)自然數(shù)2-12的時(shí)候,如果使用 1 < i 作為這個(gè)序列的下界的話,這個(gè)下界的起始值進(jìn)入了非自然數(shù)的區(qū)域。而使用 2 ≤ i ,那么就可以嚴(yán)格的保證這個(gè)下界就是一個(gè)自然數(shù)2 。所以,他認(rèn)為下界使用 更加合理。
符合這種形式的就是a) 和 c)兩種。
那么a) 和 c)還有一個(gè)區(qū)別,就是上界一個(gè)用了 一個(gè)用了 < ,那該使用哪種方式更加合適呢?
Dijkstra提出,如果想要表達(dá)一個(gè)空序列,使用a) 形式可以很容易的表達(dá),如 0<= i <0 就可以表示一個(gè)空序列。
但是如果上界和下界都用 <= 就無(wú)法表示了,除非用 1 <= i <= 0 ,但是這種形式就很不合邏輯。
所以,綜上,他認(rèn)為 a) 2 ≤ i < 13 這種表達(dá)方式更加合理一些。
也就是說(shuō),使用左閉右開(kāi)的形式定義表達(dá)式合理也更加優(yōu)雅!




我們是一群平均從業(yè)年限5+的通信專業(yè)工程師。

關(guān)注我們,帶你了解通信世界的精彩!

你點(diǎn)的每個(gè)在看,我都認(rèn)真當(dāng)成了喜歡



免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉