算法-爬樓梯問題

一個(gè)N階的樓梯,每次能1或著2階,問走n階的樓梯有多少種走法?

分析可知在走第n階的時(shí)候,是與第n-1階和n-2階有關(guān)系的。用戶走到第n階的方法應(yīng)該是用戶走到第n-1 n-2階的和。使用數(shù)學(xué)表達(dá)式應(yīng)該 如下:


當(dāng)n=1 或者n=2 時(shí),f(n) = 1,所以我們可以考慮使用遞歸來實(shí)現(xiàn)

   func ClimbStarisRecursion(n int) int{
          if n == 1 || n == 0{
              return 1
          }
          
          return ClimbStarisRecursion(n-2) + ClimbStarisRecursion(n-1)
     }

     func main(){
          step := 20
         fmt.Println(ClimbStarisRecursion(20))
     }

一般遞歸問題可以轉(zhuǎn)換為動(dòng)態(tài)規(guī)劃問題來處理,相比于遞歸算法伴隨這會(huì)伴隨著較多的出棧入棧操作消耗,我們使用動(dòng)態(tài)規(guī)劃算法性能會(huì)優(yōu)于遞歸算法,下面我們給出動(dòng)態(tài)規(guī)劃的版本

    func ClimbStarisDP(n int) int{
         pre := 1
         now := 1
         var tmp int
         for i := 2;i <= n;i++{
             tmp = now
             now = pre + now
             pre = tmp
        }   
        return now
    }

算法問題的計(jì)算過程中,最重要的抽象出問題中的數(shù)學(xué)模型,然后根據(jù)數(shù)學(xué)模型找到合適的計(jì)算方法(遞歸,動(dòng)態(tài)規(guī)劃,貪婪算法)進(jìn)行代入求解是否能夠得到需要的問題。

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

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

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