我給你舉個(gè)簡單的例子你就明白了,你可以假設(shè)n=3
高青網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,高青網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為高青超過千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的高青做網(wǎng)站的公司定做!
然后代入這個(gè)函數(shù),a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
滿意請(qǐng)采納
先調(diào)用函數(shù)f,然后把返回值賦值給z。不過這個(gè)函數(shù)不對(duì),沒有退出條件,無法停止。舉例說明吧
int f(int x)
{
if(x==0)
{
return 1;
}
else
{
return x*f(x-1);
}
}
假如f(3)
那么
第一次f(3):x!=0,調(diào)用f(2)
第二次f(2):x!=0,調(diào)用f(1)
第三次f(1):x!=0,調(diào)用f(0)
第四次f(1):x==0,返回1
返回第三次調(diào)用f(1):返回1*1=1;
返回第二次調(diào)用f(2):返回2*1=2;
返回第一次調(diào)用f(3):返回3*2=6;
f(3)的結(jié)果為6
遞歸具體用法其實(shí)就是讓你把一個(gè)問題分解成很多個(gè)類似的情況,雖然你要解決這個(gè)問題非常難,莫名其妙,要你想幾年,但是把他一直遞歸分解,就變成很好理解的單種情況,而你整個(gè)問題又是跟這個(gè)單種情況類似,把整個(gè)問題通過遞歸調(diào)用一層一層分解到最低級(jí)簡單的那種情況,就是你所需要理解的了。
一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。
(引自譚浩強(qiáng)的C語言書里)
用遞歸法計(jì)算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n1)
具體如下long ff(int n)
{
long f;
if(n0) printf("n0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",n);
y=ff(n);
printf("%d!=%ld",n,y);
}
較難題:一塊板上有三根針,A,B,C。A針上套有64個(gè)大小不等的圓盤,大的在下,小的在上。如圖5.4所示。要把這64個(gè)圓盤從A針移動(dòng)C針上,每次只能移動(dòng)一個(gè)圓盤,移動(dòng)可以借助B針進(jìn)行。但在任何時(shí)候,任何針上的圓盤都必須保持大盤在下,小盤在上。求移動(dòng)的步驟。
具體如下move(int n,int x,int y,int z)
{
if(n==1)
printf("%c--%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c--%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
從程序中可以看出,move函數(shù)是一個(gè)遞歸函數(shù),它有四個(gè)形參n,x,y,z。n表示圓盤數(shù),x,y,z分別表示三根針。move 函數(shù)的功能是把x上的n個(gè)圓盤移動(dòng)到z上。當(dāng)n==1時(shí),直接把x上的圓盤移至z上,輸出x→z。如n!=1則分為三步:遞歸調(diào)用move函數(shù),把n-1個(gè)圓盤從x移到y(tǒng);輸出x→z;遞歸調(diào)用move函數(shù),把n-1個(gè)圓盤從y移到z。在遞歸調(diào)用過程中n=n-1,故n的值逐次遞減,最后n=1時(shí),終止遞歸,逐層返回。當(dāng)n=4 時(shí)程序運(yùn)行的結(jié)果為:
分享題目:c語言函數(shù)遞歸移動(dòng) c語言函數(shù)的遞歸調(diào)用怎么理解
標(biāo)題路徑:http://muchs.cn/article40/doccceo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、Google、企業(yè)建站、電子商務(wù)、品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)