遞歸主要元素:入口,遞歸和結(jié)束。在定義遞歸函數(shù)時將這三個元素考慮進(jìn)去就行;如: double callnext(int n)
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了鄲城免費(fèi)建站歡迎大家使用!
{
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é)束;
舉一個用遞歸調(diào)用函數(shù)求輸入非負(fù)整數(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;
}
所謂遞歸,說的簡單點(diǎn),就是函數(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)到一個給定值,就可以終止的時候,你就快要考慮遞歸了。
下面演示一個斐波那契數(shù)列前N項和#include stdio.h
#define COL 10 //一行輸出10個
long scan()
{ //輸入求fibonacci函數(shù)的第N項
int n;
printf("Input the N = ");
scanf("%d",n);
return n;
}
long fibonacci(int n)
{ //fibonacci函數(shù)的遞歸函數(shù)
if (0==n||1==n) { //fibonacci函數(shù)遞歸的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反復(fù)遞歸自身函數(shù)直到碰到出口處再返回就能計算出第n項的值
}
}
int main(void)
{
int i,n;
n = scan();
printf("Fibonacci數(shù)列的前%d項\n", n);
for (i=0; in;) //輸出fibonacci函數(shù)前n項每項的值
{
printf("%-10ld",fibonacci(i++)); //調(diào)用遞歸函數(shù)并且打印出返回值
if(i%COL==0)
{ //若對COL取余等于0就換行,也就是控制每行輸出多少個,
//而COL=10就是每行輸出10個
printf("\n");
}
}
printf("\n");
return 0;
}
新聞標(biāo)題:c語言遞歸函數(shù)實例 c語言遞歸函數(shù)的例題
URL分享:http://muchs.cn/article14/dojhsde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、、全網(wǎng)營銷推廣、搜索引擎優(yōu)化、網(wǎng)站維護(hù)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)