函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt

函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt

ID:48072215

大?。?38.81 KB

頁(yè)數(shù):13頁(yè)

時(shí)間:2019-05-06

函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt_第1頁(yè)
函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt_第2頁(yè)
函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt_第3頁(yè)
函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt_第4頁(yè)
函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt_第5頁(yè)
資源描述:

《函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、函數(shù)的嵌套調(diào)用C語(yǔ)言中,所有函數(shù)的定義都是互相平行和獨(dú)立的,一個(gè)函數(shù)的定義不能包含另一個(gè)函數(shù)的定義,即不允許函數(shù)的嵌套定義,但函數(shù)的調(diào)用可以通過(guò)一個(gè)函數(shù)來(lái)調(diào)用另一個(gè)函數(shù)來(lái)實(shí)現(xiàn),這就形成了函數(shù)的嵌套調(diào)用。下面是一個(gè)兩層嵌套的例子:[例7.9]利用公式:e=1+1/1!+1/2!+1/3!+1/4!+…近似計(jì)算自然數(shù)e。算法按兩層進(jìn)行:函數(shù)fac_v()計(jì)算1/m!(m=1,2,3,...,n).函數(shù)cai_e()計(jì)算整個(gè)公式右邊之和,作為e的近似值。函數(shù)cai_e()調(diào)用函數(shù)fac_v()以獲得1/m!的值,而主函數(shù)則調(diào)用cai_c得到e的近似值。

2、函數(shù)的嵌套調(diào)用#includemain(){doublecai_e(int);intn;printf(”請(qǐng)輸入一個(gè)正整數(shù):”):scanf("%d”,&n);printf(“自然數(shù)e的近似值為%lf”,cai_e(n));}doublecai_e(intn){doublefac_v(int);doublee=1.0;while(n)e+=fac_v(n--);return(e);}doublefac_v(intm){doublev=1.0;while(m)v/=m--;return(v);}函數(shù)的嵌套調(diào)用整個(gè)程序執(zhí)行的流程如

3、圖所示:main()函數(shù){①調(diào)用cai_e(n)⑨結(jié)束}cai_e(n)函數(shù){③調(diào)用fac_v(m)⑦return語(yǔ)句}fac_v(m)函數(shù){⑤return語(yǔ)句}②⑧④⑥函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用是指一個(gè)函數(shù)直接或間接地調(diào)用了該函數(shù)本身,它有兩種形式:·直接遞歸調(diào)用·間接遞歸調(diào)用1.遞歸的形式(1)直接遞歸[例7.10]下面函數(shù)sum()計(jì)算整數(shù)和:1+2+3+4+…+n。longsum(intn){if(n==1)return(1);return(sum(n-1)+n);}函數(shù)的遞歸調(diào)用(2)間接遞歸上面的sum()函數(shù)改寫成兩個(gè)函數(shù)acc(

4、)和add()來(lái)共同實(shí)現(xiàn)這個(gè)計(jì)算:longacc(intn){longadd(int);/*函數(shù)說(shuō)明*/if(n<=1)return(1);return(add(n));}longadd(intn){longacc(int);/*函數(shù)說(shuō)明*/return(acc(n-1)+n);}在函數(shù)acc()中嵌套調(diào)用了函數(shù)add(),而在函數(shù)add()中又來(lái)調(diào)用函數(shù)acc(),這樣就形成了間接遞歸調(diào)用。函數(shù)的遞歸調(diào)用2.遞歸的過(guò)程從嵌套的角度看,這里包含了一個(gè)循環(huán)過(guò)程,在這個(gè)循環(huán)過(guò)程中函數(shù)進(jìn)行遞推的計(jì)算或操作(遞推過(guò)程);從循環(huán)的角度看,任何有效的循環(huán)都應(yīng)

5、有循環(huán)條件(遞歸條件),或者說(shuō)循環(huán)結(jié)束的出口(遞歸出口)。[例6,10]中給出的sum()函數(shù)具有以上兩個(gè)遞歸函數(shù)的必備特征:·遞推過(guò)程:“return(sum(n一1)+n);”語(yǔ)句計(jì)算sum(n-1)+n,并將它作為函數(shù)調(diào)用sum(n)的返回值,其中函數(shù)調(diào)用sum(n-1)維持循環(huán),直至遞歸出口?!みf歸出口:“if(n==1)return(1);”語(yǔ)句在n=1時(shí)結(jié)束遞推過(guò)程(這里沒(méi)有sum()函數(shù)的調(diào)用),并將數(shù)值1作為sum(1)的返回值。函數(shù)的遞歸調(diào)用如函數(shù)調(diào)用sum(5)的遞歸過(guò)程中,如下圖所示:sum(5)=sum(4)+5retur

6、n15sum(3)=sum(2)+3return6sum(4)=sum(3)+4return10遞歸出口sum(1)=1return1sum(2)=sum(1)+2return3求出sum(2)并返回求出sum(5)并返回求出sum(3)并返回求出sum(4)并返回遞推過(guò)程回推迭代過(guò)程圖6.3遞歸函數(shù)sum()的調(diào)用過(guò)程函數(shù)的遞歸調(diào)用3.遞歸的算法遞歸函數(shù)s(n)具有以下性質(zhì):·遞推關(guān)系:s(m)=s(m-1)+m,m=1,2,…,n·極端情形:s(1)=1遞推出口是極端情形的程序語(yǔ)言描述,完成了這兩點(diǎn),就完成了遞歸函數(shù)的設(shè)計(jì)。遞歸函數(shù)sum()

7、也可以寫成如下形式:longsum(intn){if(n!=1)return(sum(n一1)十n);return(1);}函數(shù)的遞歸調(diào)用4、示例[例7.12]編寫求兩個(gè)正整數(shù)的最大公約數(shù)的函數(shù)gcm().分析:以g表示正整數(shù)m和n的最大公約數(shù)。則(1)g可以整除min(m,n)和

8、m-n

9、.(2)若m==n,最大公約數(shù)g就是他們本身。用遞歸來(lái)表示:gcm(m,n)是求得正整數(shù)m和n的最大公約數(shù)。則遞推關(guān)系:gcm(m,n)=gcm(min(m,n),

10、m-n

11、).極端情形:若m==n,最大公約數(shù)gcm(m,n)就是他們本身。函數(shù)的遞歸調(diào)用程序表

12、示:unsignedgcm(unsignedm,unsignedn){if(m==n)returnm;if(m>n)return(gcm

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。