循環(huán)如何利用數(shù)學歸納法進行程序開發(fā)海量資源_第1頁
循環(huán)如何利用數(shù)學歸納法進行程序開發(fā)海量資源_第2頁
循環(huán)如何利用數(shù)學歸納法進行程序開發(fā)海量資源_第3頁
循環(huán)如何利用數(shù)學歸納法進行程序開發(fā)海量資源_第4頁
循環(huán)如何利用數(shù)學歸納法進行程序開發(fā)海量資源_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

SimpRead我們在上一講提到程序有順序、選擇、循環(huán)的一種結構。循環(huán)結構可以用短短幾行代碼,執(zhí)行成千上萬次的運算。從計算機編程的視角來看,循環(huán)結構又有三種實現(xiàn)方法,分別是forSimpRead我們在上一講提到程序有順序、選擇、循環(huán)的一種結構。循環(huán)結構可以用短短幾行代碼,執(zhí)行成千上萬次的運算。從計算機編程的視角來看,循環(huán)結構又有三種實現(xiàn)方法,分別是for循環(huán)、while循環(huán)和dowhile循環(huán);而從數(shù)學視角來看,循環(huán)結構很像是納法。牌還會撞倒第三個骨牌。以此類推,即使骨牌數(shù)量再多,也會逐一被放倒。第一,對于任意第i個骨牌而言,它的倒下能帶動第i+1個骨牌倒下;“循環(huán)”的思想也存在我們的古文化中,《愚公移山》的“又有子,子又有孫;子子孫孫無窮匱也。”簡而言之就是,我有兒子,我兒子也有兒子,我兒子的兒子也會有兒子。以此類推,子子孫孫無窮盡。第一,任意一代男子(或者說是兒子),第二,愚公有個兒子。一下。最簡單常見的數(shù)學歸納法是,用來證明當n等于任意一個自然數(shù)時某個命題成立,其證明步驟可以分下第一,當n=1第二,假設對于任意一個數(shù)字i命題成立,可以推導出在對于i+1后代,至少有一個兒子。【例1】證明對于任意一個正整數(shù)n,它的2n是偶數(shù)。第一步,當n=1時,2n=2×1=2是偶數(shù)。第二步,假設對于某個正整數(shù)i而言,2i是偶數(shù),則2(i+1)=2i+2。其中2i為偶數(shù),2為偶數(shù),兩個偶數(shù)之和也是偶數(shù),因此2(i+1)也是偶數(shù)。根據(jù)數(shù)學歸納法可以知道,對于任意一個正整數(shù)n,2n【例2】求證1+3+5+...+(2k-1)=k2第一步,當k=1時,根據(jù)數(shù)學歸納法可以知道,對于任意一個正整數(shù)n,2n【例2】求證1+3+5+...+(2k-1)=k2第一步,當k=1時,1=12第二步,假設對于任意一個正整數(shù)i而言,1+3+5+...+(2i-1)=i2,則1+3+5+...+(2i-1)+[2(i+1)-1]=i2+[2(i+1)-1]=i2+2i+2-1=i2+2i+1=(i+1)2原命題依然成立。因此1+3+5+...+(2k-1)=k2綜上這兩個例子,你會發(fā)現(xiàn)它們都是要證明“下一張多米諾骨牌”能夠倒下,也就是在證明“i推進到i+1的過程”。具體而言,這兩個例子的第二步都分別在求證2(i+1)是偶數(shù),以及(i+1)2成立,這種數(shù)學歸到一個循環(huán)結構的程序中。我們在大學C語言的課程中曾經學過,循環(huán)結構的實現(xiàn)方法有三種,分別是for循環(huán)、while循環(huán)和do-while循環(huán)。為了簡潔,下面我們定義s1是初始表達式,s2是條件表達式,s3叫作末尾循環(huán)體,s4是中間循環(huán)體,并將其代入這三個循環(huán)結構中,對比學習它們之間的聯(lián)系與不同。for如剛剛所定義的,s1是初始表達式,s2是條件表達式,s3叫作末尾循環(huán)體,s4for循環(huán)的執(zhí)行順序是s1、(s2,s4,s3)、(s2,s4,s3)、...、(s2,s4,s3)、s2例如,求解1到50所有整數(shù)之和,可以用forintresult=for(inti=1;i<=50;result+=體,最后第4行運算對應的是s4中間循環(huán)體。先執(zhí)行i=1,再判斷i≤50與否,如果為真,則執(zhí)行第4行的運算,最后執(zhí)行i++;接著循環(huán),再判斷i≤50與否,如果為真,則執(zhí)行第4行的運算,最后執(zhí)行i++;經過多次循環(huán)后,再判斷i≤50與否,直到結果為假,跳出循環(huán)結束。for循環(huán)還有很多變種,具體而言就是s1、s2和s4都可以被省略或部分省略。圍繞上面的例子,s1的2fors1的部分,這樣新的代碼可以寫作:intresult=inti=for(;i<=50;result+=intresult=inti=for(;i<=50;result+=根據(jù)代碼執(zhí)行的順序,可以發(fā)現(xiàn)s3的執(zhí)行永遠是在s4之后。因此,可以把s3和s4s4intresult=inti=for(;i<=50;result+=同樣,s2的執(zhí)行永遠在s4之前,也就意味著s2可以被放在循環(huán)體中的s4之前,而把for語句中s2的位置空閑出來。但最后一次的s2執(zhí)行,還肩負著結束循環(huán)的任務,因此需要結合if條件判斷語句和break語句,完成最后跳出循環(huán)的實現(xiàn),這樣新的代碼可以寫作:intresult=inti=for(;;if(i>result+=2.whileif(i>result+=2.while循環(huán)的另外一個實現(xiàn)方式是while循環(huán),while循環(huán)的代碼結構如下:如剛剛所定義的,s2是條件表達式,s4是中間循環(huán)體。真,則執(zhí)行s4;繼續(xù)循環(huán)判斷s2是否成立,如果為真,則執(zhí)行s4;如此循環(huán)多次后,直到s2不再成我們繼續(xù)使用while循環(huán)來實現(xiàn)1~50inti=intresult=while(i<result+=同樣地,如for循環(huán)一樣,while循環(huán)也有一些變種。具體而言,s2也是可以被省略而用其他方法實現(xiàn)。從循環(huán)執(zhí)行的順序可以發(fā)現(xiàn),s2的執(zhí)行總是在s4之前;而最后一次s2循環(huán)的任務。這就需要if條件語句和breakinti=intresult=whileif(i>resultintresult=whileif(i>result+=3.dowhile最后一種循環(huán)實現(xiàn)的方法是dowhile循環(huán),dowhile循環(huán)的基本結構如下:如剛剛所定義的,s2是條件表達式,s4是中間循環(huán)體。dowhile循環(huán)與while循環(huán)相比,區(qū)別就是執(zhí)行順序的調整。dowhile循環(huán)中,無論s2是真是假,都會至少執(zhí)行一次s4。這樣它的執(zhí)行順序就是(s4,s2)、(s4,s2)...(s4,s2)。具體而言就是:先執(zhí)行s4,再來判斷s2是真是假,如果為真,則執(zhí)行s4;再來判斷s2是真是假,如果為真,則執(zhí)行s4;再來判斷s2是真是假……如此循環(huán)多次之后,直到s2為假,跳出循環(huán)結束。我們仍以1~50所有整數(shù)求和為例,看一下dowhileinti=intresult=doresult+=}while(i<=dowhile循環(huán)也有一些變種,其s2語句也可以被調整到其循環(huán)體中,可以考慮用if條件語句和inti=intresult=inti=intresult=doresult+=if(i>從代碼執(zhí)行的順序來看,while循環(huán)與for循環(huán)都是先判斷條件,再執(zhí)行循環(huán)體。在極端情況下,第一次判斷條件就不成功,循環(huán)體就有可能一次也不被執(zhí)行;而dowhile循環(huán)則相反,它先執(zhí)行循環(huán)體,從編碼的視角來看,while循環(huán)和dowhile循環(huán),在條件判斷的括號中只需要寫循環(huán)條件;而for循環(huán)while循環(huán)至少會執(zhí)行一次循環(huán)體,它如何能被其他循環(huán)結構替代呢?這就要借助break語句提前跳出在不考慮代碼結構的美觀時,這三種循環(huán)語句可以在功能上實現(xiàn)彼此之間的切換,我們以for向dowhile如下是任意一個for循環(huán)其執(zhí)行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2它可以用下面的while循環(huán)根據(jù)其執(zhí)行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2它可以用下面的while循環(huán)根據(jù)while語句的執(zhí)行順序可知,這段代碼的執(zhí)行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、因此可以得知,兩段代碼的功能結果完全一致。而如果非要采用dowhile循環(huán)do在這里,我們補充一下break語句的知識。break語句的作用是,終止并跳出循環(huán),繼續(xù)執(zhí)行循環(huán)語句以上面的代碼為例,一旦第3行的條件判斷通過,則需要執(zhí)行beak語句。b以上面的代碼為例,一旦第3行的條件判斷通過,則需要執(zhí)行beak語句。beak當前循環(huán),這樣程序就會從第4行跳轉至第10行繼續(xù)執(zhí)行?;赽eak語句,再根據(jù)dowhile語句的執(zhí)行順序可知,這段代碼的執(zhí)行順序為s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2,因此可以得知兩段代碼的功能結果完全一致。這里要給大家提個醒:如果是在技術面試時,千萬不要說某某功能的開發(fā),只能用for循環(huán)、while循環(huán)或dowhile循環(huán),這一定是錯的。因為,功能上這三種循環(huán)的實現(xiàn)是完全可以實現(xiàn)互換的;只不數(shù)學歸納法和循環(huán)結構有很多相似之處,它們都是動作集合。數(shù)學歸納法不關注歸納過程的結束而循環(huán)結構作為一種程序開發(fā)邏輯,則必須要關注循環(huán)過程的結束或死機。歸納法的問題增加一個截止條件的限制,那就是k小于100時。這道例題是:證明在k<100時,1+3+5+...+(2k-1)=k2證明k=1假設k=i時等式成立后,k=i+1令s1為k=,s4為等式成立,s3為k=i或k=i+1,再補充題目的終止條件k<100為s2。這樣,根據(jù)for循環(huán)執(zhí)行的邏輯,把這些動作按照s1、(s2,s4,s3)、(s2,s4,s3)...(s2,s4,s3)、s2基本的for循環(huán)代碼框架。在這個框架中,最開始的s1、s2、s4,即為當k=1在這個框架中,任意相鄰的兩組(s2,s4,s3)、(s2,s4,s3),就是假設k=i時等式成立后,k=i+1等式也就是說,此時的數(shù)學歸納法證明和for循環(huán)實現(xiàn),在功能上是等價的,我們給出for循環(huán)的代碼如intleft=intleft_temp=intright=for(intk=1;k<100;left_temp=2*k-leftrightk*if(leftprintf("%disleftrightk*if(leftprintf("%dis代碼的前三行定義了3個變量,分別是left、left_temp和right,其中l(wèi)eft和right分別用來存儲等式兩邊的結果,left_temp用來存儲公式中每輪增加的一項;第4行,進入for循環(huán),得到對應的s1、s2和s3;第6行,計算出當前一輪的left_temp值;第7行,把left_temp作為增量,增

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論