遞歸主要元素:入口,遞歸和結(jié)束。在定義遞歸函數(shù)時將這三個元素考慮進去就行;如: double callnext(int n)

創(chuàng)新互聯(lián)擁有網(wǎng)站維護技術(shù)和項目管理團隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護、聯(lián)通服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護服務(wù)覆蓋集團企業(yè)、上市公司、外企網(wǎng)站、購物商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球成百上千企業(yè)提供全方位網(wǎng)站維護、服務(wù)器維護解決方案。
{
if(n1) return callnext(n-1)+3;
else return 1;
}
int main()
{
int m;
scanf("%d",m);
printf("result=%f",callnext(m));
return 0;
}
入口:callnext(m);遞歸:if(n1) return callnext(n-1)+3中的callnext(n-1);結(jié)束:else return 1;整個執(zhí)行流程:callnext(m) 調(diào)用 callnext(m-1);callnext(m-1)調(diào)用callnext(m-1-1)。。。
callnext(2)調(diào)用callnext(1);callnext(1)=1;結(jié)束;
所謂遞歸,說的簡單點,就是函數(shù)自己調(diào)用自己,然后在某個特定條件下。結(jié)束這種自我調(diào)用。
如果不給予這個結(jié)束條件,就成了無限死循環(huán)了。這樣這個遞歸也就毫無意義了。
如下面問題
1 1 2 3 5 8 13 21 ........n
分析可以看出, i 表示第幾個數(shù), n 表示該數(shù)的值
當(dāng)i = 1 時, n = 1;
當(dāng)i = 2 時, n = 1;
當(dāng)i = 3 時 n = i1 + i2;
當(dāng)i = 4 時 n = i2 + i3
所以可以寫個函數(shù)
int fun(int n) // 這里的n代表第幾個數(shù)
{
if(1 == n || 2 == n) // 第一個數(shù)
{
return 1;
}
else
{
return fun(n - 1) + fun(n - 2); // 這里就是自己調(diào)用自己,形成循環(huán)自我調(diào)用。
}
}
注: 以上代碼只是用來演示遞歸,不包含錯誤校驗。
在實際生產(chǎn)過程中。該代碼不夠健壯。
如此,就完成了遞歸。你就可以求得第n個數(shù)了。
何時考慮使用遞歸。
當(dāng)你分析一個問題的時候,發(fā)現(xiàn)這個問題,是一個自我循環(huán)時,而且這個自我循環(huán)到一個給定值,就可以終止的時候,你就快要考慮遞歸了。
舉一個用遞歸調(diào)用函數(shù)求輸入非負整數(shù)的階乘的例子,如下:
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
int?fact(int?n){
if(n==1?||?n==0)?return?1;
else?return?n*fact(n-1);
}
int?main(void){
int?x;
while(1){
printf("Input?x(int?12=x=0)...\nx=");
if(scanf("%d",x),x=0??x=12)//x12時會使結(jié)果溢出
break;
printf("Error,redo:?");
}
printf("%d!?=?%d\n",x,fact(x));
return?0;
}
本文題目:c語言遞歸函數(shù)的事例,簡單的遞歸例子C語言
網(wǎng)站URL:http://chinadenli.net/article14/dsidide.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、移動網(wǎng)站建設(shè)、、App設(shè)計、小程序開發(fā)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)