巧用遞歸函數(shù),問題簡單化

首先,先簡單的介紹一下遞歸函數(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)存多,因此,需要我們巧用它。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,039評論 0 2
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,143評論 2 9
  • 1.函數(shù)參數(shù)的默認值 (1).基本用法 在ES6之前,不能直接為函數(shù)的參數(shù)指定默認值,只能采用變通的方法。
    趙然228閱讀 830評論 0 0
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別? C沒有Protection行為...
    阿面a閱讀 7,891評論 0 10
  • 家庭是人生最好的庇護所,因為有了愛才有了家。楊絳女士昨日去世,她的《我們仨》讓人動容。 還有四天,我的小毛頭來到世...
    岳小乖么么噠閱讀 327評論 0 0

友情鏈接更多精彩內(nèi)容