首先,先簡單的介紹一下遞歸函數(shù)。一個含直接或間接調(diào)用本函數(shù)語句的函數(shù)被稱之為遞歸函數(shù),遞歸就是一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身,執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進入新的一層。
可以用到遞歸函數(shù)的例子有很多,但我主要以Fibonacci數(shù)列這個典型例子進行探討,接下來直接上題:

因此,程序應(yīng)該這樣:
#include <stdio.h>
int func(int n)?
{
????if (n == 0)
????????return 0;
????else if (n == 1)
????????return 1;
????else
????????return func(n - 1) + func(n - 2);? ? //運用遞歸函數(shù)
}
int main() {
????int t;
????scanf("%d", &t);
????printf("%d", func(t));
}
可見,我們的遞歸就在于當i≥?2時。當i ≥ 2時,F(xiàn)[i] = F[i-1] + F[i-2],而我們遞歸循壞的也就是F[i] = F[i-1] + F[i-2],而當這個遞歸到i=0或者i=1時,執(zhí)行return部分,該遞歸也就結(jié)束了,因此,哪部分需要用到遞歸,就調(diào)用factorial() 函數(shù)。

要想理解遞歸函數(shù),重點是理解它是如何逐層進入,又是如何逐層退出的。當i ≥ 2時,先是要執(zhí)行F[i] = F[i-1] + F[i-2]這個,所進入的都是待解的數(shù),直到遞歸到i=0或者i=1,我們在依次推回去,開始一步一步的退出結(jié)束,得到F[i] 的值。
以上就是遞歸函數(shù)的具體執(zhí)行步驟以及運行。
最后在說明一下遞歸的條件:
在上面的例子中能夠看出,它必須滿足以下兩個條件:
1)必須有一個終止處理或計算的準則。也就是說,存在限制條件,當符合這個條件時遞歸便不再繼續(xù)。對于?factorial(),當形參 n 等于 0 或 1 時,遞歸就結(jié)束了。
2)每次遞歸調(diào)用之后越來越接近這個限制條件。對于 factorial(),每次遞歸調(diào)用的實參為?n - 1以及n-2,這會使得形參 n 的值逐漸減小,越來越趨近于?1 或 0。
當然,理解了遞歸函數(shù),對于一些題當然要顯得簡單易懂,更為后面學(xué)習(xí)棧打下基礎(chǔ),但遞歸函數(shù)運行時間大,占用內(nèi)存多,因此,需要我們巧用它。