1. 程式人生 > >走樓梯算法

走樓梯算法

pan log .com image 樓梯 turn cas col 開始

首先,我們來看下下面這棟樓梯:

技術分享

一共四層,我們規定“一個人爬樓梯,一步可以邁一級,二級臺階,如果樓梯有N級,要求編寫程序,求總共有多少種走法”,接下來我們統計下這四層,每層的走法:

技術分享

從這個簡短的統計中,我們可以發現一個規律(如果覺得還看不出,可以再多幾階樓梯),從第三階梯開始,走法就是第一階梯走法和第二階梯走法之和,第四階梯走法是第三階梯和第二階梯走法之和,所以,我們可以得到如下如下公式:

技術分享

由此可知,此處應用遞歸算法。

而第一階梯和第二階梯這樣無規律的數字,我們可以將他定量表示,由此,我們得出如下實現方式來求出N階階梯的走法:

function getNum($n) {
    switch
($n) { case 1: return 1; case 2: return 2; default: return getNum($n-1) + getNum($n-2); } }

假如爬樓梯時一步還可以邁三步,這時候其實就是,N級樓梯問題可以劃分為:N-1級樓梯,N-2級樓梯,N-3級樓梯的走法之和。以此類推,不過一般也就時最大三步了。

走樓梯算法