7.2走樓梯

有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階,2階,3階,請實現(xiàn)一個方法,計算小孩有多少種上樓梯的方式.
為了防止溢出,請將結(jié)果模以mod 1000000007

給定一個正整數(shù)int n,請返回一個數(shù),代表上樓的方式數(shù).
保證n小于等于100000.



什么是遞歸,看起來是從上往下處理問題,這是現(xiàn)象,
實際上是從小往上處理問題,這是本質(zhì).
執(zhí)行完最小最小的那個不可分割的問題,然后返回一個數(shù)值用于上一層使用,這就是遞歸的核心思想.

遞歸解法思路:
最小的不可分割問題有3個
第一個,當臺階n == 0時,此時有1種走法,就是不動.
第二個,當臺階n==1時,有1種走法,即走1步.
第三個,當臺階n==2時,有2種走法,即一步一步上去,或者一下子走兩步.

有了這三個基本問題后,剩下的就是類似的子問題.
當n == 3時,如果先走1步,那么就剩下兩階,從這三個基本問題中的n==2可以得出結(jié)果,如果要走上第三階,那么就有2種走法.
如果先走2步,那么就剩下一階,從這三個基本問題中的n==1中可以得出結(jié)果,如果要走上第三階,有1種走法.
如果先走3步,那么就剩下零階,從這三個基本問題中的n==0中可以得出結(jié)果,即只有1種走法.
那么n == 3時,一共有1+1+2=4種走法,依次類推.
從子問題到大問題,就是遞歸的思想,每次return返回的都是下面一層的值,返回到上一層來使用

圖片.png
    迭代的思想:
    何為之迭代,即在知道循環(huán)的次數(shù)之后,用循環(huán)來實現(xiàn)遞歸的解法.
第一步就是先初始化基本條件.
第二步,循環(huán),使用基本條件來不斷更新下一個循環(huán)的值
package _7節(jié);

public class _7_2爬樓梯 {
    public static void main(String[] args) {
        System.out.println(climbFloor(5));
        System.out.println(climbFloor(5));
    }

    /*
        遞歸
     */
    public static int climbFloor(int n) {
        if (n < 0)
            return 0;
        if (n == 0 || n == 1)
            return 1;
        if (n == 2)
            return 2;
        return climbFloor(n - 1) + climbFloor(n - 2) + climbFloor(n - 3);
    }

    /*
        迭代,即循環(huán),知道循環(huán)的次數(shù)
     */
    public static int climbFloorDiedai(int n) {
        if (n < 0)
            return 0;
        if (n == 0 || n == 1)
            return 1;
        if (n == 2)
            return 2;
        if (n == 3)
            return 4;
        int n1 = 1;
        int n2 = 2;
        int n3 = 4;

        for (int i = 4; i <= n; i++) {
            int _n1 = n1;
            n1 = n2;
            n2 = n3;
            n3 = ((n1 + n2) % 1000000007 + _n1) % 1000000007;
        }
        return n3;
    }
}

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

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

  • 有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階、2階、3階。請實現(xiàn)一個方法,計算小孩有多少種上樓的方式。為...
    正在努力ing閱讀 823評論 0 0
  • 題目描述有個小孩正在上樓梯,樓梯有n階臺階,小孩一次可以上1階、2階、3階。請實現(xiàn)一個方法,計算小孩有多少種上樓的...
    難以置信的優(yōu)雅閱讀 267評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,993評論 0 2
  • 1. 有一棵二叉樹,請設(shè)計一個算法,按照層次打印這棵二叉樹。 給定二叉樹的根結(jié)點root,請返回打印結(jié)果,結(jié)果按照...
    Crystalajj閱讀 4,191評論 0 2
  • 動態(tài)規(guī)劃算法一、基本概念動態(tài)規(guī)劃過程是:每次決策依賴于當前狀態(tài),又隨即引起狀態(tài)的轉(zhuǎn)移。一個決策序列就是在變化的狀態(tài)...
    Stephen__Li閱讀 472評論 0 1

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