逆推法求解N級階梯問題

所謂逆推,即:從已知問題的結(jié)果出發(fā),用迭代表達式逐步推算出問題的開始的條件

問題

有一條總共N級的階梯,一步可以跨一級,也可以跨兩級,請問走完這N級階梯總共要多少總走法?

分析

慣常思維,順序迭代,第一步可以一級也可以兩級,在兩個分支中第二步可以一級也可以兩級,第三步...
如此反復,我不相信你不凌亂

lin.jpg

但是如果以目標為導向往前推,走到第n級的時候,有可能是從n-1級過來的,也有可能是從n-2級過來的,那么問題可以分解為從f(n-1)和f(n-2),可以用公式表示之后,問題是不是清晰很多了

為什么會這樣呢?設n=3,那么我們把所有的可能畫成一棵樹(數(shù)字表示階梯的編號):

tree.png

順推相當于你要從葉子節(jié)點去畫一棵樹,而逆推相當于從根節(jié)點去畫一棵樹,這還是n=3的情況,n=10的時候如果你不凌亂的話那可以去最強大腦了

要訣:

  1. 枚舉的問題多半與樹有關(guān),多往這想想
  2. 順推不行的時候,換一個方向,從目標往回推試試

js代碼實現(xiàn)

    function showSteps(n, array) {
        array.unshift(n);
        if(n > 2) {
            //必須重新復制數(shù)組,否則各路徑應用的相同的內(nèi)存地址,相互污染
            showSteps(n-1, array.slice());
            showSteps(n-2, array.slice());
        } else {
            console.log('***************數(shù)字代表階梯的編號*******************');
            console.log(array);
        }
    }

    showSteps(5, []);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容