1. 程式人生 > >遞迴,舉幾個簡單的例子

遞迴,舉幾個簡單的例子

遞迴:函式直接或者間接呼叫函式本身。

遞迴對於初學者來說還是一個比較難理解的點,但要是掌握了遞迴的要點還是沒那麼難得,寫遞迴之前要知道以三點:

1.從什麼時候開始

2.到什麼時候結束

3.每次遞迴時你需要幹嘛

第二點和第二點不難理解,關鍵是第3點,其實遞迴相當於每個相似的過程重複執行。一般來說,遞迴分為有返回值和無返回值,下面來看幾個簡單的例子。

#include<stdio.h>

//1-100的累加

int fun(int i)
{
        if(100==i)
                return i;
        return i+fun(i+1);
}

//求階乘
int fun2(int i)
{
        if(1==i)
                return 1;
        return i*fun2(i-1);
}

//前n項階乘 的和
int fun3(int i)
{
        if(1==i)
                return 1;
        return fun2(i)+fun3(i-1);
}

}
void main()
{
        printf("1-100的和為%d\n",fun(1));
        printf("5的階乘為%d\n",fun2(5));
        printf("前5項階乘的和為%d\n",fun3(5));
}

可以看到以上三個例子:

求1-100的和,使用的是累加的思想,開始的值是傳遞的引數i=1,當i=100時返回i=100,函式結束。每次遞迴的過程

i=1時fun(1)=1+fun(2),i=2時fun(2)=2+fun(3).......一直到fun(99)=99+fun(100)而此時返回值fun(100)=100;再依次往上逆推,

1+2+3+.....+99+fun(100),這就是遞迴求1-100的和,階乘也是類似的累乘法。

要記住累加每一次遞迴的過程是加i的值,所以每次要把i的值加起來。fun(i+1)就是呼叫函數了,每次呼叫函式   i  都要加1,當i=100時函式結束。

而求n項階乘的和相當於每一項都是  i  的階乘再累加,這也是一種累乘和累加的思想,每一次累加的值呼叫一個求階乘的函式就行了。最後放上斐波拉契數列的遞迴演算法,遞歸併不難,難得是思考每一步需要做的是什麼

int fun4(int i)//斐波拉契數
{
        if(0==i)
                return 0;
        else if(1==i)
                return 1;
        return fun4(i-1)+fun4(i-2);
}

void main()

int i=1;
        printf("前10項的斐波拉契數列為:");
        for(;i<11;i++)
        {
                printf(" %d",fun4(i));
        }
        printf("\n");

}