數據結構遞歸的使用

什麼是遞歸?
遞歸是一種應用非常廣泛的算法,因爲它可以通過同一種算法不斷低簡單重複,這樣可以把一個複雜的問題分解成很多層簡單的問題。
遞歸實現原理?
遞歸的本質有三條:其一是自頂而下,其二是自己不斷重複,其三是循環中的結束條件。

遞歸例子:
假如這裏有 n 個臺階,每次你可以跨 1 個臺階或者2個臺階,請問走這n個臺階有多少種走法?如果有7個臺階,你可以2,2,2,1這樣子上去,也可以1,2,1,1,2這樣子上去,總之走法有很多,那如何用編程求得總共有多少種走法呢?
實現過程:例如:在第7個臺階,就有2種方法走到,第一種從6臺階跨到7臺階,第二種從5臺階跨到7臺階。所以每個臺階都有兩種走法,要麼走1步,要麼走2步,
如果n臺階的走法用公式表達就是:f(n) = f(n-1)+f(n-2)
有了推導公式遞歸代碼基本就完成了一半,接下來看看代碼如何終止遞歸條件。當有一個臺階時,我們不需要在繼續遞歸,就只有一種走法。所以f(1)=1,當n=2,f(2) =f(2-1)+f(2-2) ,f(2-2) = f(0) =1 ,表示0個臺階有一種走法,不過這樣子看起來就不符合正常的邏輯思維了。所以我們可以把f(2) = 2作爲一種終止條件,表示走2個臺階,有兩種走法,一步走完或者分兩步來走。實現代碼:

int f(int n) 
{
   if(n == 1) return 1;
   if(n == 2) return 2; 
   return f(n-1)+f(n-2);
}

總之寫遞歸代碼的關鍵就是找到如何將大問題拆解爲小問題的規律,並且基於此寫出遞推公式,然後再推敲終止條件,最後將遞推公式和終止條件翻譯成代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章