分別用遞歸和動態規劃實現爬樓梯的算法

一、遞歸計算測試

    public int f1(int n){
        if(n==0){
            return 1;
        }
        if(n<0){
            return 0;
        }
        return f1(n-1)+f1(n-2)+f1(n-3);
    }.net

二、動態規劃遞歸

    public String f2(int n){
        if(n < 1) return "0";
        if(n == 1) return "1";
        if(n == 2) return "2";
        if(n == 3) return "4";
        /* 若是是四個臺階,上法有7種,1-1-1-1,2-1-1,1-2-1,1-1-2,2-2,3-1,1-3
         * 可知 方法是前三種狀況方法的總和 7=1+2+4
         * 經過這個規律進行計算
         */
        String [] step = new String[n];
        step[0] = "1";
        step[1] = "2";
        step[2] = "4";
        if(n<=3){
            return step[n-1];
        }
        for(int i=3;i<n;i++){
            step[i] = new BigDecimal(step[i-3]).add(new BigDecimal(step[i-2]).add(new BigDecimal(step[i-1]))).toString();
        }
        return step[n-1];
    }ci

3 測試get

    @Test
    public void testGo(){
        int r1 = f1(35);    //到35個臺階已經很慢了
        System.out.println(r1);
        String r2 = f2(35);
        System.out.println(r2);
    }class

相關文章
相關標籤/搜索