C語(yǔ)言第11講 函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt

C語(yǔ)言第11講 函數(shù)的嵌套調(diào)用和遞歸調(diào)用.ppt

ID:57053214

大?。?31.50 KB

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

時(shí)間:2020-07-30

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

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

1、5.4函數(shù)的嵌套調(diào)用和遞歸調(diào)用5.4.1函數(shù)的嵌套調(diào)用C語(yǔ)言不允許函數(shù)嵌套定義(單一性、獨(dú)立性)。但允許函數(shù)嵌套調(diào)用,即被調(diào)函數(shù)中又調(diào)用其它函數(shù)(見(jiàn)P133例5.11)。mian函數(shù)①調(diào)用squa函數(shù)s=s+squa(i)結(jié)束squa函數(shù)調(diào)用fact函數(shù)b=fact(k)fact函數(shù)②③④⑤⑥⑦⑧⑨兩層嵌套的執(zhí)行過(guò)程}}}#includedoublefact(intm){doublea=1;inti;for(i=1;i<=m;i++)a=a*i;returna;}doublesqua(intn){doubleb;intk;k=n*n;b=fact(k);returnb;

2、}voidmain(void){inti;doubles=0;for(i=1;i<=5;i++)s=s+squa(i);printf("s=%e",s);}5.4.2函數(shù)的遞歸調(diào)用(嵌套調(diào)用的特例)概念:函數(shù)直接或間接地自我調(diào)用稱為遞歸函數(shù)。intfun1(intx){…z=fun1(y);…}intfun1(intx)intfun2(intt){{……z=fun2(y);c=fun1(a);……}}直接引用自身間接引用自身遞歸在沒(méi)有控制條件的情況下是無(wú)窮的遞歸。#includevoidmain(void){printf("*****");main();}只有通

3、過(guò)控制條件,使遞歸調(diào)用終止,才能應(yīng)用。#includevoidmain(void){charch;printf("******");ch=getchar();if(ch!='9')main();}遞歸舉例:求n!n!=1n=0或n=1n(n-1)!n>1f(n)=1n=0或n=1nf(n-1)n>1#includelonglfac(long);voidmain(void){longi,x;scanf("%ld",&i);x=lfac(i);printf("%ld",x);}longlfac(longn){if(n==0

4、

5、n==1)return

6、1;elsereturn(n*lfac(n-1));}lfac(4)4*lfac(3)3*lfac(2)2*flac(1)2*13*2*14*3*2*1遞推回歸=n×(n-1)×(n-2)×…×3×2×1=n×(n-1)!5.5變量的作用域和存儲(chǔ)類型變量生存期:變量占用內(nèi)存單元(活著)的時(shí)間。內(nèi)存中供用戶使用的存儲(chǔ)空間:程序區(qū):存放程序代碼。數(shù)據(jù)區(qū):存放數(shù)據(jù),分為動(dòng)態(tài)存儲(chǔ)區(qū)和靜態(tài)存儲(chǔ)區(qū)。5.5.1變量的生存期和作用域C語(yǔ)言中,定義變量應(yīng)包含三個(gè)內(nèi)容:①數(shù)據(jù)類型:變量占用內(nèi)存空間的大小。如:int,float,char。②作用域:變量在程序中的有效區(qū)域。③存儲(chǔ)類型:變量在內(nèi)存中的存儲(chǔ)方式。

7、存儲(chǔ)方式不同,變量占用內(nèi)存時(shí)間不同。①靜態(tài)存儲(chǔ)區(qū):定義變量(程序編譯)時(shí)就分配內(nèi)存單元,直到程序結(jié)束。生存期為整個(gè)程序運(yùn)行期。②動(dòng)態(tài)存儲(chǔ)區(qū):使用時(shí)才分配內(nèi)存單元,使用完畢,立即釋放。生存期為函數(shù)調(diào)用期。變量的作用域:變量在程序中的可使用范圍(有效性)。1.局部變量定義在函數(shù)內(nèi)部的變量。也稱為內(nèi)部變量。放在動(dòng)態(tài)區(qū)中,只有調(diào)用它的函數(shù)才能使用它。調(diào)用時(shí)才分配內(nèi)存單元,調(diào)用結(jié)束,內(nèi)存即刻被釋放,作用域:僅限于函數(shù)內(nèi)部或復(fù)合語(yǔ)句內(nèi)。生存期:函數(shù)調(diào)用期間。作用域可以是一個(gè)函數(shù)或一個(gè)復(fù)合語(yǔ)句,取決于定義變量的位置,可分為局部變量和全局變量。注意:不同的函數(shù)或復(fù)合語(yǔ)句中可以使用相同的變量名。因?yàn)樗鼈冏?/p>

8、用域不同,所以它們互不干預(yù)。即:同名,不同作用域的變量是不同的變量。例:(見(jiàn)p137例5.13)#includevoidfunc();main(){inty=10;printf(“1:y=%d”,y);func();printf(“2:y=%d”,y);}voidfunc(){intx=5;{intx=3;{intx=1;printf(“@x=%d”,x);}printf(“@@x=%d”,x);}printf(“@@@x=%d”,x);}運(yùn)行結(jié)果:1:y=10@x=1@@x=3@@@x=52:y=102.全局變量定義在函數(shù)之外的變量。也稱為外部變量

9、。放在靜態(tài)區(qū)中。作用域:從定義直到文件結(jié)束。生存期:在程序的整個(gè)執(zhí)行過(guò)程中。#includevoidadd(void);inta,b,c;voidmain(void){scanf(“%d,%d”,&a,&b);add();printf(“%d”,c);}voidadd(void){c=a+b;}外部變量作用域注意:1.任何函數(shù)對(duì)外部變量的修改都會(huì)影響其他函數(shù)對(duì)它的引用。2.當(dāng)函數(shù)中出現(xiàn)和全局變量同名的局部變量時(shí),局

當(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)系客服處理。