所謂遞歸,說的簡單點,就是函數(shù)自己調(diào)用自己,然后在某個特定條件下。結(jié)束這種自我調(diào)用。
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標準是產(chǎn)品質(zhì)量的保證,主要從事做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)網(wǎng)站建設(shè)、手機網(wǎng)站制作設(shè)計、網(wǎng)頁設(shè)計、品牌網(wǎng)站設(shè)計、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。
如果不給予這個結(jié)束條件,就成了無限死循環(huán)了。這樣這個遞歸也就毫無意義了。
如下面問題
1 1 2 3 5 8 13 21 ........n
分析可以看出, i 表示第幾個數(shù), n 表示該數(shù)的值
當i = 1 時, n = 1;
當i = 2 時, n = 1;
當i = 3 時 n = i1 + i2;
當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ù)了。
何時考慮使用遞歸。
當你分析一個問題的時候,發(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;
}
這個行嗎:
求1+2+……+100的和
先分析一下。第一遞歸變量的問題,從題目上看應(yīng)該取1,2,……,100這些變量的值作為遞歸的條件;第二就是如何終止的問題,從題目上看應(yīng)該是當數(shù)為100的時候就不能往下加了。那么我們試著寫一下程序。
int add(int);
main()
{
int num=1,sn;
sn=add(num);
printf("%d\n",sn);
getch();
}
int add(int num)
{
static int sn;
sn+=num;
if(num==100) return sn;
add(++num);
}
分析一下程序:前調(diào)用add(1),然后在子函數(shù)中把這個1加到sn上面。接著調(diào)用add(2),再把sn加2上來。這樣一直到100,到了100的時候,先加上來,然后發(fā)現(xiàn)滿足了if條件,這時返回sn的值,也就是1+2+……+100的值了。