資源描述:
《C語言函數(shù)遞歸調(diào)用.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、第6章函數(shù)函數(shù)的遞歸調(diào)用函數(shù)的遞歸調(diào)用在調(diào)用一個函數(shù)的過程中,出現(xiàn)直接或間接地調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。f函數(shù)調(diào)用f函數(shù)f1函數(shù)調(diào)用f2函數(shù)f2函數(shù)調(diào)用f1函數(shù)intf(intx){intz;if(x==0)return1;if(x>0)z=f(x-1);elseif(x<0)z=f(x+1);return(2*z);}例1:函數(shù)的遞歸調(diào)用#includevoidrecur(int);intmain(void){recur(1);return0;}voidrecur(intn)//遞歸函數(shù){
2、printf("第%d級調(diào)用",n);//1if(n<4){recur(n+1);//遞歸}printf("第%d級返回",n);//2}輸出結(jié)果:第1級調(diào)用第2級調(diào)用第3級調(diào)用第4級調(diào)用第4級返回第3級返回第2級返回第1級返回解析:從結(jié)果可以看出,1和2相當(dāng)于循環(huán)體,當(dāng)符合測試條件(即n<4)時,#1部分循環(huán);當(dāng)測試條件為false時,2部分循環(huán)。在遞歸函數(shù)中,位于遞歸調(diào)用之前的語句(即1部分),按被調(diào)函數(shù)(即recur())的順序執(zhí)行;位于遞歸調(diào)用之后的語句(即2部分),按被調(diào)函數(shù)相反的順序執(zhí)行。每級函數(shù)調(diào)
3、用都有自己的變量,遞歸調(diào)用就相當(dāng)于又從頭開始執(zhí)行函數(shù)的代碼。每次函數(shù)調(diào)用都會返回一次,并且按順序逐級返回遞歸。例2:函數(shù)的遞歸調(diào)用#includeintfun(intn)//定義函數(shù){if(n==0
4、
5、n==1){n=1;}else{n=n*fun(n-1);//遞歸調(diào)用函數(shù)}returnn;}intmain(){inti,j;printf("請輸入一個數(shù)字:");scanf("%d",&i);j=fun(i);printf("它的階乘為:%d",j);}例3:函數(shù)的遞歸調(diào)用有3個人坐在一起,問第
6、3個人多少歲?他說比第2個人大2歲。問第2個人多少歲?他說比第1個人大2歲。最后問第1個人,他說是10歲。請問第3個人多大?分析:age(3)=age(2)+2;age(2)=age(1)+2;age(1)=10;歸納:n=1age(n)=10n>1age(n)=age(n-1)+2程序如下:#includeintage(intn){intc;if(n==1){c=10;}elseif(n>1){c=age(n-1)+2;}returnc;}intmain(void){printf(“%d”,age
7、(3));return0;}程序執(zhí)行過程如下:intmain(void){printf(“%d”,age(3));}intage(3){intc;c=age(2)+2;returnc;}intage(2){intc;c=age(1)+2;returnc;}intage(1){intc;c=10;returnc;}例4:函數(shù)的遞歸調(diào)用課堂習(xí)題#includevoidfunc1(inti);voidfunc2(inti);charst[]="hello,friend!";voidfunc1(inti
8、){printf("%c",st[i]);if(i<3){i+=2;func2(i);}}voidfunc2(inti){printf("%c",st[i]);if(i<3){i+=2;func1(i);}}intmain(void){inti=0;func1(i);return0;}A)helloB)helC)hloD)hlm1.下列程序執(zhí)行后的輸出結(jié)果是()2.有如下程序:#includeintfunc(inta,intb){return(a+b);}intmain(void){in
9、tx=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%d”,r);return0;}該程序的輸出的結(jié)果是()。A)12B)13C)14D)153.下面程序的輸出結(jié)果是()。#includeintf(inta,intb);intmain(void){inti=2,p;p=f(i,i+1);printf(“%d”,p);return0;}intf(inta,intb){intc;if(a>b){c=1;}elseif(a==b){c=0;}else{c=
10、-1;}returnc;}A)-1B)0C)1D)2