




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
遞歸函數(shù)函數(shù)函數(shù)的嵌套調(diào)用不允許嵌套定義函數(shù),函數(shù)間的關(guān)系是平行的、獨(dú)立的允許嵌套調(diào)用,即在調(diào)用某函數(shù)過(guò)程中又調(diào)用另一函數(shù)main()調(diào)用函數(shù)a結(jié)束a函數(shù)b函數(shù)調(diào)用函數(shù)b
【例1:】求三個(gè)數(shù)中最大數(shù)和最小數(shù)的差值#include<stdio.h>
intdif(intx,inty,intz);intmax(intx,inty,intz);
intmin(intx,inty,intz);voidmain(){inta,b,c,d;scanf("%d%d%d",&a,&b,&c);
d=dif(a,b,c);printf("Max-Min=%d\n",d);}intdif(intx,inty,intz){returnmax(x,y,z)-min(x,y,z);}intmax(intx,inty,intz){intr;r=x>y?x:y;return(r>z?r:z);}intmin(intx,inty,intz){intr;r=x<y?x:y;return(r<z?r:z);}main()調(diào)用函數(shù)dif輸出結(jié)束dif函數(shù)max函數(shù)調(diào)用函數(shù)max調(diào)用函數(shù)minmin函數(shù)
⑩⑾⑿函數(shù)的遞歸調(diào)用在函數(shù)調(diào)用過(guò)程中,直接或間接的調(diào)用自身直接遞歸調(diào)用:在函數(shù)體內(nèi)又調(diào)用自身間接遞歸調(diào)用:當(dāng)函數(shù)1去調(diào)用另一函數(shù)2時(shí),而另一函數(shù)2反過(guò)來(lái)又調(diào)用函數(shù)1自身f()調(diào)fintf(intx){inty,z;……
z=f(y);…….return(2*z);}直接遞歸調(diào)用調(diào)f2調(diào)f1f1()f2()intf1(intx){inty,z;……
z=f2(y);…….return(2*z);}intf2(intt){inta,c;……
c=f1(a);…….return(3+c);}間接遞歸調(diào)用【例2:】有5個(gè)人,第5個(gè)人比第4個(gè)人大2歲,第4個(gè)人比第3個(gè)人大2歲,……第2個(gè)人比第1個(gè)人大2歲,第1個(gè)人10歲,問(wèn)第5個(gè)人多大?age(5)age(4)age(3)age(2)age(1)=2+age(4)=2+age(3)=2+age(2)=2+age(1)
遞推回推=10=12=14=16=18數(shù)學(xué)模型10n=1age(n)=age(n-1)+2n>1#include<stdio.h>intage(intn){intc;if(n==1)c=10;elsec=2+age(n-1);return(c);}voidmain()
{printf(“%d\n”,age(5));}遞歸的本質(zhì)將大問(wèn)題的求解轉(zhuǎn)化為較小問(wèn)題的求解持續(xù)不斷的分解過(guò)程最終將問(wèn)題化簡(jiǎn)成一個(gè)最基本的形式(該形式是一個(gè)已知解)
條件成立,進(jìn)行遞歸用if語(yǔ)句控制條件不成立,結(jié)束遞歸解決無(wú)終止遞歸調(diào)用的方法是:確定好結(jié)束遞歸的條件【例3:】用遞歸方法計(jì)算n!分析4!=4*3*2*14!=4*3!3!=3*2!......遞歸公式n!=1(n=0或1)n*(n-1)!
(n>1)#include<stdio.h>longfac(intn)
{longf;if(n==0||n==1)
f=1;elsef=n*fac(n-1);returnf;}voidmain(){printf("\n\t4!=%ld\n",fac(4));}f=fac(4);
n=4if(n==0||n==1)f=1;elsef=n*fac(n-1);return(f)n=3if(n==0||n==1)f=1;elsef=n*fac(n-1);return(f)n=2if(n==0||n==1)f=1;elsef=n*fac(n-1);return(f)n=1if(n==0||n==1)f=1;elsef=n*fac(n-1);return(f)
設(shè)n=44!遞歸結(jié)束條件244*3!6*43*2!2*1!12*31**21【例4:】求兩個(gè)整數(shù)的最大公約數(shù)求最大公約數(shù)可以采用輾轉(zhuǎn)相除法intgcd(inta,intb){ if(a%b==0)returnb; returngcd(b,a%b);}【例5:】使用遞歸算法生成斐波那契(Fibonacci)數(shù)列遞歸公式:f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n≥3)intfib(intn){if(n<=2)
return1;else
returnfib(n-1)+fib(n-2);}【例6:】漢諾塔問(wèn)題問(wèn)題假設(shè)有三個(gè)分別命名為X,Y和Z的塔座,在塔座X上插有n個(gè)直徑大小各不相同、依從小到大編號(hào)為1,2,…,n的圓盤?,F(xiàn)要求將X軸上的n個(gè)圓盤移到塔座Z上,并按同樣的順序疊放移動(dòng)時(shí)必須遵循以下規(guī)則:每次只能移動(dòng)一個(gè)圓盤圓盤可以插在X,Y和Z中的任一塔座上任何時(shí)候都不能將一個(gè)較大的圓盤壓在較小的圓盤之上XYZ漢諾塔問(wèn)題分析n=1時(shí)將圓盤1從塔座X移到塔座ZXYZXYZ基本情形漢諾塔問(wèn)題分析n>1時(shí)利用塔座Z為輔助塔座,將壓在圓盤n之上的n-1個(gè)盤從塔座X移到塔座Y
(——與原問(wèn)題類似)將圓盤n從塔座X移到塔座Z利用塔座X為輔助塔座,將塔座Y上的n-1個(gè)圓盤移動(dòng)到塔座Z
(——與原問(wèn)題類似)XYZXYZXYZXYZ漢諾塔問(wèn)題設(shè)計(jì)move函數(shù):移動(dòng)一個(gè)盤-把盤n從s塔移到d塔hanoi函數(shù):移動(dòng)n個(gè)盤的漢諾塔問(wèn)題-把n個(gè)盤從x塔移到z塔,y塔作為輔助塔voidmove(intn,chars,chard);voidhanoi(intn,charx,chary,charz);漢諾塔問(wèn)題實(shí)現(xiàn)#include<stdio.h>voidmove(intn,chars,chard);voidhanoi(intn,charx,chary,charz);voidmain(){intn;printf("\tInputthenumberofdisks:");scanf("%d",&n);hanoi(n,'X','Y','Z');}voidhanoi(intn,charx,chary,charz){
if(n==1)move(n,x,z);else{hanoi(n-1,x,z,y);move(n,x,z);
hanoi(n-1,y,x,z
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 63584:2024 EN Open Charge Point Protocol (OCPP)
- 公司裝修合同正規(guī)
- 浴場(chǎng)承包合同
- 電腦維護(hù)保養(yǎng)合同
- 公立醫(yī)院職工購(gòu)房借款合同
- 化糞池設(shè)備銷售合同
- 房地產(chǎn)物業(yè)售樓處服務(wù)合同
- 場(chǎng)地房屋租賃服務(wù)合同
- 擔(dān)保借款三方合同
- 擋土墻施工承包合同
- 幼兒園木工坊安全教育
- 內(nèi)科主任年終述職報(bào)告
- 船舶起重安全管理規(guī)定規(guī)定培訓(xùn)
- 2024年不停電電源UPS相關(guān)項(xiàng)目營(yíng)銷計(jì)劃書(shū)
- 智慧農(nóng)業(yè)中的農(nóng)業(yè)機(jī)械與設(shè)備管理技術(shù)
- 公司SWOT分析表模板
- 解決問(wèn)題的工作方案
- 理發(fā)店業(yè)務(wù)轉(zhuǎn)讓協(xié)議書(shū)范本
- 2024年濰坊護(hù)理職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 2024年江蘇省中學(xué)生生物學(xué)奧林匹克初賽理論試題
- 生產(chǎn)流水線的規(guī)劃方案
評(píng)論
0/150
提交評(píng)論