??環(huán)境:牌越迹客的編譯環(huán)境
??語(yǔ)言:JavaScript
??難點(diǎn):
??題目:一只青蛙一次可以跳上1級(jí)臺(tái)階增显,也可以跳上2級(jí)……它也可以跳上n級(jí)挑庶。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法亚侠。
??解題思路:利用數(shù)學(xué)規(guī)律可以解決
f(1) = 1
f(2) = f(2-1) + f(2-2) //f(2-2) 表示2階一次跳2階的次數(shù)。
f(3) = f(3-1) + f(3-2) + f(3-3)
...
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n)
說(shuō)明:
1)這里的f(n) 代表的是n個(gè)臺(tái)階有一次1,2,...n階的 跳法數(shù)厅瞎。
2)n = 1時(shí)饰潜,只有1種跳法,f(1) = 1
n = 2時(shí)和簸,會(huì)有兩個(gè)跳得方式彭雾,一次1階或者2階,這回歸到了問(wèn)題(1) 比搭,f(2) = f(2-1) + f(2-2)
-
n = 3時(shí),會(huì)有三種跳得方式南誊,1階身诺、2階、3階抄囚,
那么就是第一次跳出1階后面剩下:f(3-1);第一次跳出2階霉赡,剩下f(3-2);第一次3階幔托,那么剩下f(3-3)
因此結(jié)論是f(3) = f(3-1)+f(3-2)+f(3-3)
-
n = n時(shí)穴亏,會(huì)有n中跳的方式,1階重挑、2階...n階嗓化,得出結(jié)論:
f(n) = f(n-1)+f(n-2)+...+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + ... + f(n-1)
-
由以上已經(jīng)是一種結(jié)論,但是為了簡(jiǎn)單谬哀,我們可以繼續(xù)簡(jiǎn)化:
f(n-1) = f(0) + f(1)+f(2)+f(3) + ... + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2)
f(n) = f(0) + f(1) + f(2) + f(3) + ... + f(n-2) + f(n-1) = f(n-1) + f(n-1)
可以得出:
f(n) = 2*f(n-1)
得出最終結(jié)論,在n階臺(tái)階刺覆,一次有1、2史煎、...n階的跳的方式時(shí)谦屑,總得跳法為:
| 1 ,(n=0 )
f(n) = | 1 ,(n=1 )
| 2*f(n-1),(n>=2)
??代碼:
function jumpFloorII(number)
{
// write code here
var result = 1;
while(number-- > 1){
result *= 2;
}
return result;
}