c語言函數(shù)遞歸移動(dòng) c語言函數(shù)的遞歸調(diào)用怎么理解

c語言函數(shù)遞歸調(diào)用

我給你舉個(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)采納

C語言函數(shù)的遞歸調(diào)用

先調(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

c語言遞歸函數(shù)

遞歸具體用法其實(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)

網(wǎng)站托管運(yùn)營