溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

c語(yǔ)言遞歸函數(shù)的使用方法

發(fā)布時(shí)間:2020-06-11 09:39:53 來(lái)源:億速云 閱讀:214 作者:Leah 欄目:編程語(yǔ)言

這篇文章給大家分享的是c語(yǔ)言遞歸函數(shù)的使用方法。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

遞歸就是一個(gè)過(guò)程或 函數(shù) 在其定義或說(shuō)明中有直接或間接調(diào)用自身的一種方法;遞歸函數(shù)就是直接或間接調(diào)用自身的函數(shù),也就是自身調(diào)用自己的過(guò)程。

1.Fibonacci數(shù)

我們直到Fibonacci數(shù)的遞推公式為:F(0)=F(1)=1,F(n)=F(n-1)+F(n-2) n>=2;

這個(gè)明顯地給出了遞歸邊界n=0或1的時(shí)候F(n)的值,和遞歸邏輯F(n)=F(n-1)+F(n-2),即遞推公式.所以這個(gè)遞歸函數(shù)不難書(shū)寫(xiě)

#includeusing namespace std;
int F(int n)//函數(shù)返回一個(gè)數(shù)對(duì)應(yīng)的Fibonacci數(shù){ if(n0 || n1)//遞歸邊界
return 1; return F(n-1) + F(n-2);//遞歸公式}
int main(){ //測(cè)試
int n; while(cin >> n) cout << F(n) << endl;
return 0;
}

2.階乘的遞歸公式:n*F(n-1)

代碼如下:

#includeusing namespace std;
int F(int n){ if(n==0)//遞歸邊界
return 1;
return n*F(n-1);//遞歸公式}
int main(){ int n; cin >> n; cout << F(n) << endl;
return 0;
}

3.數(shù)組求和

給一個(gè)數(shù)組a[]:a[0],a[1],…,a[n-1]如何用遞歸的方式求和?

仍然是兩個(gè)問(wèn)題:遞歸邊界和遞歸公式.

遞歸邊界是什么?一時(shí)不容易想到,但是我們想到了求和,多個(gè)數(shù)的求和過(guò)程是什么,x,y,z,w手動(dòng)求和的過(guò)程是什么?步驟如下:

x+y=a,任務(wù)變?yōu)閍,z,w求和

a+z=b,任務(wù)變?yōu)閎,w求和

b+w=c得出答案

思考一下,【得出答案】這一步為什么就可以得出答案呢?(廢話?)是因?yàn)?,一個(gè)數(shù)不用相加就能得出答案.

所以,遞歸的邊界就是只有一個(gè)數(shù).

所以,遞歸邊界有了,那么遞歸公式呢?其實(shí)手動(dòng)計(jì)算過(guò)程中,隱含了遞歸公式:

其中+為求兩個(gè)數(shù)的和,F(xiàn)為求多個(gè)數(shù)的和的遞歸函數(shù).代碼如下:

#includeusing namespace std;
int F(int a[],int start,int end){ if(start==end)//遞歸邊界
return a[start];
return a[start] + F(a,start+1,end);//遞歸公式}
int main(){ int a[] = {1,2,3,4,5}; int s=0,e=4; cout << F(a,s,e) << endl;
return 0;
}

4.求數(shù)組元素最大值

手動(dòng)求最大值的過(guò)程是什么,遍歷+比較,過(guò)程如下:

例如,求3,2,6,7,2,4的最大值:先設(shè)置最大值max=-999999,然后將max和數(shù)組元素逐個(gè)(遍歷)比較如果a[i]>max,則更新max的值為a[i],否則max不變,繼續(xù)向后遍歷,直到遍歷結(jié)束.

max<3,則max=3

max>2,max=3不變

max<6,則max=6

max<7,則max=7

max>2,max=7不變

max>4,max=7不變

遍歷結(jié)束,max=7為最大值.

和求和類(lèi)似,遞歸的公式如下:

其中max為求兩個(gè)數(shù)的較大值函數(shù),F(xiàn)為求多個(gè)數(shù)的最大值的遞歸函數(shù).代碼如下:

#includeusing namespace std;
#define max(a,b) (a>b?a:b)
int F(int a[],int s,int e){ if(s==e) return a[s]; else if(s+1 == e)//遞歸邊界
return max(a[s],a[e]);
return max(a[s],F(a,s+1,e));//遞歸公式!!!}
int main(){ int a[] = {5,1,4,6,2}; int s = 0,e = 4; cout << F(a,s,e) << endl;
return 0;
}

以上就是c語(yǔ)言遞歸函數(shù)的使用方法介紹,詳細(xì)使用情況還得要大家自己使用過(guò)才能知道具體要領(lǐng)。如果想閱讀更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI