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

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

ID:33587705

大小:73.00 KB

頁數(shù):7頁

時間:2019-02-27

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

《12——函數(shù)的嵌套調(diào)用和遞歸調(diào)用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、吉林醫(yī)藥學(xué)院教案(章節(jié)部分)章節(jié)、課題8.5函數(shù)的嵌套調(diào)用8.6函數(shù)的遞歸調(diào)用學(xué)時2日期11.11教學(xué)目的和要求:1.掌握:函數(shù)的嵌套調(diào)用方法2.掌握:函數(shù)的遞歸調(diào)用方法教學(xué)重點與難點:教學(xué)重點:函數(shù)的嵌套和遞歸調(diào)用教學(xué)難點:函數(shù)的遞歸調(diào)用教學(xué)方法與手段:多媒體教學(xué)啟發(fā)式教學(xué)案例式教學(xué)教學(xué)中的創(chuàng)新點:將生物群體中類和對象的概念引入教學(xué),使得學(xué)生深刻理解面向?qū)ο蟪绦蛟O(shè)計的基本概念討論、思考題和課后作業(yè):備注:吉林醫(yī)藥學(xué)院教案(講稿部分)教學(xué)過程時間分配吉林醫(yī)藥學(xué)院教案(講稿部分)8.5函數(shù)的嵌套調(diào)用C語言中不允許作嵌套的函數(shù)定義。因此各函數(shù)之間是平行的

2、,不存在上一級函數(shù)和下一級函數(shù)的問題。但是C語言允許在一個函數(shù)的定義中出現(xiàn)對另一個函數(shù)的調(diào)用。這樣就出現(xiàn)了函數(shù)的嵌套調(diào)用。即在被調(diào)函數(shù)中又調(diào)用其它函數(shù)。這與其它語言的子程序嵌套的情形是類似的。其關(guān)系可表示如圖。圖表示了兩層嵌套的情形。其執(zhí)行過程是:執(zhí)行main函數(shù)中調(diào)用a函數(shù)的語句時,即轉(zhuǎn)去執(zhí)行a函數(shù),在a函數(shù)中調(diào)用b函數(shù)時,又轉(zhuǎn)去執(zhí)行b函數(shù),b函數(shù)執(zhí)行完畢返回a函數(shù)的斷點繼續(xù)執(zhí)行,a函數(shù)執(zhí)行完畢返回main函數(shù)的斷點繼續(xù)執(zhí)行。【例8.4】計算s=22!+32!本題可編寫兩個函數(shù),一個是用來計算平方值的函數(shù)f1,另一個是用來計算階乘值的函數(shù)f2。主函

3、數(shù)先調(diào)f1計算出平方值,再在f1中以平方值為實參,調(diào)用f2計算其階乘值,然后返回f1,再返回主函數(shù),在循環(huán)程序中計算累加和。longf1(intp){intk;longr;longf2(int);k=p*p;r=f2(k);returnr;}longf2(intq){longc=1;inti;for(i=1;i<=q;i++)c=c*i;returnc;}main(){吉林醫(yī)藥學(xué)院教案(講稿部分)inti;longs=0;for(i=2;i<=3;i++)s=s+f1(i);printf("s=%ld",s);}在程序中,函數(shù)f1和f2均為長

4、整型,都在主函數(shù)之前定義,故不必再在主函數(shù)中對f1和f2加以說明。在主程序中,執(zhí)行循環(huán)程序依次把i值作為實參調(diào)用函數(shù)f1求i2值。在f1中又發(fā)生對函數(shù)f2的調(diào)用,這時是把i2的值作為實參去調(diào)f2,在f2中完成求i2!的計算。f2執(zhí)行完畢把C值(即i2!)返回給f1,再由f1返回主函數(shù)實現(xiàn)累加。至此,由函數(shù)的嵌套調(diào)用實現(xiàn)了題目的要求。由于數(shù)值很大,所以函數(shù)和一些變量的類型都說明為長整型,否則會造成計算錯誤。8.6函數(shù)的遞歸調(diào)用一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)

5、。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進入新的一層。例如有函數(shù)f如下:intf(intx){inty;z=f(y);returnz;}這個函數(shù)是一個遞歸函數(shù)。但是運行該函數(shù)將無休止地調(diào)用其自身,這當(dāng)然是不正確的。為了防止遞歸調(diào)用無終止地進行,必須在函數(shù)內(nèi)有終止遞歸調(diào)用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調(diào)用,然后逐層返回。下面舉例說明遞歸調(diào)用的執(zhí)行過程?!纠?.5】用遞歸法計算n!用遞歸法計算n!可用下述公式表示:n!=1(n=0,1)n×(n-1)!(n>1)吉林醫(yī)藥學(xué)院教案(講稿部分)按公式可編程如下:longff(i

6、ntn){longf;if(n<0)printf("n<0,inputerror");elseif(n==0

7、

8、n==1)f=1;elsef=ff(n-1)*n;return(f);}main(){intn;longy;printf("inputainteagernumber:");scanf("%d",&n);y=ff(n);printf("%d!=%ld",n,y);}程序中給出的函數(shù)ff是一個遞歸函數(shù)。主函數(shù)調(diào)用ff后即進入函數(shù)ff執(zhí)行,如果n<0,n==0或n=1時都將結(jié)束函數(shù)的執(zhí)行,否則就遞歸調(diào)用ff函數(shù)自身。由于每次遞歸調(diào)用的實參

9、為n-1,即把n-1的值賦予形參n,最后當(dāng)n-1的值為1時再作遞歸調(diào)用,形參n的值也為1,將使遞歸終止。然后可逐層退回。下面我們再舉例說明該過程。設(shè)執(zhí)行本程序時輸入為5,即求5!。在主函數(shù)中的調(diào)用語句即為y=ff(5),進入ff函數(shù)后,由于n=5,不等于0或1,故應(yīng)執(zhí)行f=ff(n-1)*n,即f=ff(5-1)*5。該語句對ff作遞歸調(diào)用即ff(4)。進行四次遞歸調(diào)用后,ff函數(shù)形參取得的值變?yōu)?,故不再繼續(xù)遞歸調(diào)用而開始逐層返回主調(diào)函數(shù)。ff(1)的函數(shù)返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值

10、為6*4=24,最后返回值ff(5)為24*5=120。例8.5也可以不用遞歸的方法來完成。如可以用遞推法,

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

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

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