資源描述:
《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í),局