第8講B-遞歸函數(shù)市賽課一等獎(jiǎng)全省微課優(yōu)質(zhì)課特等獎(jiǎng)PPT課件省名師優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件_第1頁(yè)
第8講B-遞歸函數(shù)市賽課一等獎(jiǎng)全省微課優(yōu)質(zhì)課特等獎(jiǎng)PPT課件省名師優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件_第2頁(yè)
第8講B-遞歸函數(shù)市賽課一等獎(jiǎng)全省微課優(yōu)質(zhì)課特等獎(jiǎng)PPT課件省名師優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件_第3頁(yè)
第8講B-遞歸函數(shù)市賽課一等獎(jiǎng)全省微課優(yōu)質(zhì)課特等獎(jiǎng)PPT課件省名師優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件_第4頁(yè)
第8講B-遞歸函數(shù)市賽課一等獎(jiǎng)全省微課優(yōu)質(zhì)課特等獎(jiǎng)PPT課件省名師優(yōu)質(zhì)課賽課獲獎(jiǎng)?wù)n件市賽課一等獎(jiǎng)?wù)n件_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

遞歸函數(shù)/11/261/56一個(gè)經(jīng)過(guò)重復(fù)將問(wèn)題分解為同類(lèi)子問(wèn)題從而處理問(wèn)題方法“Thepowerofrecursionevidentlyliesinthepossibilityofdefininganinfinitesetofobjectsbyafinitestatement.Inthesamemanner,aninfinitenumberofcomputationscanbedescribedbyafiniterecursiveprogram,evenifthisprogramcontainsnoexplicitrepetitions.”NiklausWirth遞歸2/56階乘n!=n*(n-1)!Fibonacci數(shù)列

f(n)=f(n-1)+f(n-2)…什么問(wèn)題適合遞歸處理?3/56函數(shù)遞歸調(diào)用在調(diào)用一個(gè)函數(shù)過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱(chēng)為函數(shù)遞歸調(diào)用。4/56f2函數(shù)調(diào)用f1函數(shù)函數(shù)遞歸調(diào)用f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)直接調(diào)用本函數(shù)間接調(diào)用本函數(shù)5/56函數(shù)遞歸調(diào)用

例7.6有5個(gè)學(xué)生坐在一起問(wèn)第5個(gè)學(xué)生多少歲?他說(shuō)比第4個(gè)學(xué)生大2歲問(wèn)第4個(gè)學(xué)生歲數(shù),他說(shuō)比第3個(gè)學(xué)生大2歲問(wèn)第3個(gè)學(xué)生,又說(shuō)比第2個(gè)學(xué)生大2歲問(wèn)第2個(gè)學(xué)生,說(shuō)比第1個(gè)學(xué)生大2歲最終問(wèn)第1個(gè)學(xué)生,他說(shuō)是10歲請(qǐng)問(wèn)第5個(gè)學(xué)生多大6/56函數(shù)遞歸調(diào)用解題思緒:要求第5個(gè)年紀(jì),就必須先知道第4個(gè)年紀(jì)要求第4個(gè)年紀(jì)必須先知道第3個(gè)年紀(jì)第3個(gè)年紀(jì)又取決于第2個(gè)年紀(jì)第2個(gè)年紀(jì)取決于第1個(gè)年紀(jì)每個(gè)學(xué)生年紀(jì)都比其前1個(gè)學(xué)生年紀(jì)大27/567.6函數(shù)遞歸調(diào)用解題思緒:age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=108/56age(5)=age(4)+2age(4)=age(3)+2age(3)=age(2)+2age(2)=age(1)+2age(1)=10age(2)=12age(3)=14age(4)=16age(5)=18

遞歸邊界9/56#include<stdio.h>intage(intn);intmain(){printf("NO.5,age:%d\n",age(5));return0;}

intage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;return(c);}10/56age(5)輸出age(5)mainc=age(4)+2age函數(shù)n=5c=age(3)+2age函數(shù)n=4c=age(1)+2age函數(shù)n=2c=age(2)+2age函數(shù)n=3c=10age函數(shù)n=1age(1)=10age(2)=12age(3)=14age(4)=16age(5)=181811/56例7.7用遞歸方法求n!。解題思緒:求n!能夠用遞推方法:即從1開(kāi)始,乘2,再乘3……一直乘到n。遞推法特點(diǎn)是從一個(gè)已知事實(shí)(如1!=1)出發(fā),按一定規(guī)律推出下一個(gè)事實(shí)(如2!=1!*2),再?gòu)倪@個(gè)新已知事實(shí)出發(fā),再向下推出一個(gè)新事實(shí)(3!=3*2!)。n!=n*(n-1)!。12/56例7.7用遞歸方法求n!。解題思緒:求n!也能夠用遞歸方法,即5!等于4!×5,而4!=3!×4…,1?。剑笨捎孟旅孢f歸公式表示:13/56#include<stdio.h>intfac(intn);intmain(){intn=0;inty=0;printf("inputanintegernumber:");scanf("%d",&n);y=fac(n);printf("%d!=%d\n",n,y);return0;}14/56intfac(intn){intf;if(n<0) printf("n<0,dataerror!");elseif(n==0||n==1) f=1;elsef=fac(n-1)*n;returnf;}注意溢出15/56fac(5)輸出fac(5)mainf=fac(4)×5fac函數(shù)n=5f=fac(3)×4fac函數(shù)n=4f=fac(1)×2fac函數(shù)n=2f=fac(2)×3fac函數(shù)n=3f=1fac函數(shù)n=1fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=12012016/56

例7.8漢諾塔(Hanoitower)問(wèn)題。古代有一個(gè)梵塔,塔內(nèi)有3個(gè)座A、B、C,開(kāi)始時(shí)A座上有64個(gè)盤(pán)子,盤(pán)子大小不等,大在下,小在上。有一個(gè)老和尚想把這64個(gè)盤(pán)子從A座移到C座,但要求每次只允許移動(dòng)一個(gè)盤(pán),且在移動(dòng)過(guò)程中在3個(gè)座上都一直保持大盤(pán)在下,小盤(pán)在上。在移動(dòng)過(guò)程中能夠利用B座。要求編程序輸出移動(dòng)盤(pán)子步驟。17/5664個(gè)盤(pán)子從A座移動(dòng)到C座,需要移動(dòng)大約264

次盤(pán)子,每1秒移動(dòng)1次,則需約5840億年18/56思緒:假如有另外一個(gè)和尚能有方法將上面63個(gè)盤(pán)子從一個(gè)座移到另一座。那么,問(wèn)題就處理了。此時(shí)老和尚只需這么做:19/56轉(zhuǎn)化為遞歸形式:(1)命令第2個(gè)和尚將63個(gè)盤(pán)子從A座移到B座(2)自己將1個(gè)盤(pán)子(最底下、最大盤(pán)子)從A座移到C座(3)再命令第2個(gè)和尚將63個(gè)盤(pán)子從B座移到C座20/56ABC……將63個(gè)從A到B第1個(gè)和尚做法21/56……ABC讓第2個(gè)和尚將63個(gè)從A到B第1個(gè)和尚做法22/56……ABC自己將1個(gè)從A到C第1個(gè)和尚做法23/56……ABC自己將1個(gè)從A到C第1個(gè)和尚做法24/56……ABC讓第2個(gè)和尚將63個(gè)從B到C第1個(gè)和尚做法25/56……ABC讓第2個(gè)和尚將63個(gè)從B到C第1個(gè)和尚做法26/56ABC……將62個(gè)從A到C第2個(gè)和尚做法27/56ABC……讓第3個(gè)和尚將62個(gè)從A到C第2個(gè)和尚做法28/56ABC……自己將1個(gè)從A到B第2個(gè)和尚做法29/56ABC……自己將1個(gè)從A到B第2個(gè)和尚做法30/56ABC……讓第3個(gè)和尚將62個(gè)從C到B第2個(gè)和尚做法31/56ABC……讓第3個(gè)和尚將62個(gè)從C到B第2個(gè)和尚做法32/56第3個(gè)和尚做法第4個(gè)和尚做法第5個(gè)和尚做法第6個(gè)和尚做法第7個(gè)和尚做法……第63個(gè)和尚做法第64個(gè)和尚僅做:將1個(gè)從A移到C33/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將2個(gè)盤(pán)子從A移到B34/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將2個(gè)盤(pán)子從A移到B35/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將1個(gè)盤(pán)子從A移到C36/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將1個(gè)盤(pán)子從A移到C37/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將2個(gè)盤(pán)子從B移到C38/56ABC將3個(gè)盤(pán)子從A移到C全過(guò)程將2個(gè)盤(pán)子從B移到C39/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從A移到C40/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從A移到C41/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從A移到B42/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從A移到B43/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從C移到B44/56ABC將2個(gè)盤(pán)子從A移到B過(guò)程將1個(gè)盤(pán)子從C移到B45/56ABC將2個(gè)盤(pán)子從B移到C過(guò)程46/56ABC將2個(gè)盤(pán)子從B移到C過(guò)程47/56ABC將2個(gè)盤(pán)子從B移到C過(guò)程48/56ABC將2個(gè)盤(pán)子從B移到C過(guò)程49/56由上面分析可知:將n個(gè)盤(pán)子從A座移到C座能夠分解為以下3個(gè)步驟:(1)將A上n-1個(gè)盤(pán)借助C座先移到B座上(2)把A座上剩下一個(gè)盤(pán)移到C座上(3)將n-1個(gè)盤(pán)從B座借助于A座移到C座上50/56能夠?qū)⒌?1)步和第(3)步表示為:將“one”座上n-1個(gè)盤(pán)移到“two”座(借助“three”座)。在第(1)步和第(3)步中,one、two、three和A、B、C對(duì)應(yīng)關(guān)系不一樣。對(duì)第(1)步,對(duì)應(yīng)關(guān)系是one對(duì)應(yīng)A,two對(duì)應(yīng)B,three對(duì)應(yīng)C。對(duì)第(3)步,對(duì)應(yīng)關(guān)系是one對(duì)應(yīng)B,two對(duì)應(yīng)C,three對(duì)應(yīng)A。51/56把上面3個(gè)步驟分成兩類(lèi)操作:(1)將n-1個(gè)盤(pán)從一個(gè)座移到另一個(gè)座上(n>1)。這就是大和尚讓小和尚做工作,它是一個(gè)遞歸過(guò)程,即和尚將任務(wù)層層下放,直到第64個(gè)和尚為止。(2)將1個(gè)盤(pán)子從一個(gè)座上移到另一座上。這是大和尚自己做工作。52/56編寫(xiě)程序。用hanoi函數(shù)實(shí)現(xiàn)第1類(lèi)操作(即模擬小和尚任務(wù))用move函數(shù)實(shí)現(xiàn)第2類(lèi)操作(模擬大和尚自己移盤(pán))函數(shù)調(diào)用hanoi(n,one,two.three)表示將n個(gè)盤(pán)子從“one”座移到“three”座過(guò)程(借助“two”座)函數(shù)調(diào)用move(x,y)表示將1個(gè)盤(pán)子從x座移到y(tǒng)座過(guò)程。x和y是代表A、B、C座之一,依據(jù)每次不一樣情況分別取A、B、C代入53/56#include<stdio.h>intmain(){voidhanoi(intn,charone,chartwo,charthree);intm;printf(“thenumberofdiskes:");scanf("%d",&m);printf("move%ddiskes:\n",m);

hanoi(m,'A','B','C');}54/56voidhanoi(intn,charone,chartwo,charthree){

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論