算法---斐波那契思想

1.主要框架:f(n)=f(n-1)+f(n-2)

用不同的方法求解斐波那契數列的時間效率大不相同。第一種基於遞歸的解法雖然直觀但時間效率很低,在實際軟件開發中不會用這種方法,也不可能得到面試官的青睞。第二種方法吧遞歸的算法用循環實現,極大地提高時間效率。除了面試官直接要求編程實現斐波那契數列,還有不少面試題可以看成斐波那契數列的應用。

2.題目一:上臺階問題

某人一次可以上一級臺階,也可以上兩級臺階。求該人上一個n級的臺階總共有多少種上法。 在這裏插入圖片描述
首先我們考慮最簡單的情況。如果只有1臺階,那顯然只有一種上法。如果有兩級臺階,那就有兩種跳法:一種是分兩次跳,每次跳1級,另外一種就是一次跳2級。
接着我們再來討論一般情況。我們把n級臺階時的跳發看成n的函數,記爲f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳發數目等於後面剩下的n-1級臺階的跳發數目,即爲f(n-1);二是第一次跳兩級,此時跳發數目等於後面剩下的n-2級臺階的跳發數目(比如前n-2級臺階跳法有3種,這次跳一次2級就可以到目的地,所以整體上看,從最初位置,最後一步跳2級跳到終點的跳法就是跳n-2級的方法數3),即爲f(n-2)。因此,n級臺階的不同跳法的總數f(n)=f(n-1)+f(n-2)。分析到這裏,我們不難看出這實際上就是斐波那契數列了。

3.題目二:矩形拼圖問題

我們可以用21的小矩形橫着或者豎着去覆蓋更大的矩形。請問用8個21的小矩形無重疊地覆蓋一個28的的大矩形,總共有多少種方法? 在這裏插入圖片描述
我們先把2
8的覆蓋方法記爲f(8)。用第一個21的小矩形去覆蓋大矩形的最左邊時有兩種選擇:豎着放或者橫着放。當豎着放的時候,右邊還剩下27的區域,這種情形下的覆蓋方法記爲f(7)。接下來考慮橫着放的情況。當21的小矩形橫着放在左上角的時候,左下角必須橫着放一個21的小矩形,而在右邊還剩下2*6的區域,這種情況下的覆蓋方法記爲f(6),因此f(8)=f(7)+f(6)。此時我們可以看出,這仍然是斐波那契數列。

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