跳臺階

題目

樓梯有n階臺階,上樓可以一步上1階,也可以一步上2階,編一程序計算共有多少種不同的走法。

解答

歸納

  1. 當只有1階臺階時,只有1種走法,只走1階。
    即n=1,f(1)=1
  2. 當有2階臺階時,一次走1階有1種走法,一次走2階有2種走法。
    即n=2,f(2)=1+1=2
  3. 當有n階臺階時,從第n-1階到第n階走1階有f(n-1)中走法,從第n-2階到第n階走2階有f(n-2)階走法。
    即,f(n)=f(n-1)+f(n-2)

推導公式

f(1) = 1
f(2) = 2
f(n) = f(n-1) + f(n-2) , n>2

代碼

C語言代碼實現:

int upSteps(int stepSum){

    if(stepSum < 1){
        return -1;
    }
    if(stepSum == 1 ){
        return 1;
    }
    if(stepSum == 2){
        return 2;
    }
    return upSteps(stepSum-1)+upSteps(stepSum-2);

}

擴展1

一個臺階總共有n級,如果一次可以跳1級,可以跳2級,也可以跳3級。求總共有多少總跳法。

歸納

  1. 當只有1階臺階時,只有1種走法,只走1階。
    即n=1,f(1)=1
  2. 當有2階臺階時,一次走1階有1種走法,一次走2階有2種走法。
    即n=2,f(2)=1+1=2
  3. 當有3階臺階時,一次走1階有1種走法,一次走2階有2種走法,一次走3階有1中走法。
    即,n=3,f(3)=1+2+1=4
  4. 當有n階臺階時,從第n-1階到第n階走1階有f(n-1)中走法,從第n-2階到第n階走2階有f(n-2)階走法,從第n-3到n階走3階有f(n-3)階走法。
    即,f(n)=f(n-1)+f(n-2)+f(n-3)

推導公式

f(1) = 1
f(2) = 2
f(3) = 4
f(n) = f(n-1) + f(n-2) +f(n-3) , n>3

代碼

C語言代碼實現:

int upStepsEx1(int stepSum){

    if(stepSum <= 0){
        return -1;
    }
    if(stepSum == 1 ){
        return 1;
    }
    if(stepSum == 2){
        return 2;
    }
    if(stepSum == 3 ){
        return 4;
    }
    return upStepsEx1(stepSum-1)+upStepsEx1(stepSum-2)+upStepsEx1(stepSum-3);

}

擴展2

一個臺階總共有n級,如果一次可以跳1級,也可以跳2級……它也可以跳上n級。此時該青蛙跳上一個n級的臺階總共有多少種跳法。

歸納

  1. 當只有1階臺階時,只有1種走法,只走1階。
    即n=1,f(1)=1
  2. 當有2階臺階時,一次走1階有1種走法,一次走2階有2種走法。
    即n=2,f(2)=f(1)+1=1+1=2
  3. 當有3階臺階時,一次走1階有1種走法,一次走2階有2種走法,一次走3階有1中走法。
    即,n=3,f(3)=f(1)+f(2)+1=1+2+1=4
  4. 當有n階臺階時,從第n-1階到第n階走1階有f(n-1)種走法,從第n-2階到第n階走2階有f(n-2)種走法,從第n-3到n階走3階有f(n-3)種走法……,從第2階到n階走n-1階有f(2)中走法,從第1階到n階走n階有f(1)種走法。
    即,f(n)=f(n-1)+f(n-2)+f(n-3)+…+f(2)+f(1)。

推導公式

f(1) = 1
f(2) = 2
f(n) = f(n-1) + f(n-2) +f(n-3)+…+f(2)+f(1) , n>3
因 f(n-1)=f(n-2)+f(n-3)+…+f(2)+f(1),
即 f(n)=2*f(n-1)

代碼

C語言代碼實現:

int upStepsEx2(int stepSum){

    if(stepSum <= 0){
        return -1;
    }
    if(stepSum == 1 ){
        return 1;
    }
    if(stepSum == 2){
        return 2;
    }
    return 2*upStepsEx2(stepSum-1);

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章