問題一:
乙隻青蛙一次可以跳上一級台階,也可以跳上二級台階,求該青蛙跳上乙個n級的台階總共需要多少種跳法。
我們來分析一下:
當n等於1的時候,只需要跳一次即可,只有一種跳法,記f(1)=1
當n等於2的時候,可以先跳一級再跳一級,或者直接跳二級,共有2種跳法,記f(2)=2
當n等於3的時候,他可以從一級台階上跳兩步上來,也可以從二級台階上跳一步上來,所以總共有f(3)=f(2)+f(1);
同理當等於n的時候,總共有f(n)=f(n-1)+f(n-2)(這裡n>2)種跳法。
所以大家一看就知道這就是個斐波那契數列,只不過有一點不同的是斐波那契數列一般是以1,1,2,3,5,8,13……開始的,而我們這是以1,2,3,5,8,13……開始的,少了最前面的乙個1。最**很簡單
我們以計算f(6)為例畫個圖看一下計算的過程
我們看到遞迴會重複計算已經計算過的值,效率明顯不是很高,我們還可以把計算過的值儲存起來,防止重複計算,我們來看下**
我們還可以把遞迴改為非遞迴的形式,看下**
上面3種方式都可以實現青蛙跳台階問題,那麼哪種效率更高呢,我們來找個比較大的資料測試一下
來看一下執行的時間
我們看到遞迴優化之前執行時間是非常長的,優化之後時間大幅下降,但對於非遞迴來說又稍遜色了一些。
問題二:
乙隻青蛙一次可以跳上一級台階,也可以跳上二級台階……,也可以跳n級,求該青蛙跳上乙個n級的台階總共需要多少種跳法。
我們來分析一下
乙隻青蛙要想跳到n級台階,可以從一級,二級……,也就是說可以從任何一級跳到n級,
所以遞推公式我們很容易就能想到
f(n)=f(n-1)+f(n-2)+……+f(2)+f(1)+f(0);最後這個f(0)是可以去掉的,因為0級就相當於沒跳,所以f(0)=0;
然後我們把f(0)去掉在轉換一下:
f(n-1)=f(n-2)+f(n-3)+……+f(2)+f(1);
所以f(n)=f(n-1)+f(n-1)=2*f(n-1);他是乙個等比數列,且f(1)=1;
我們我們可以得出f(n)=2^(n-1);**如下
或者還可以改為非遞迴的
問題三:
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上m級。求該青蛙跳上乙個n級的台階總共有多少種跳法
這道題我們要分開討論:
1,如果n<=m;因為只能往上跳不能往下跳,所以大於n的都不可以跳,如果跳了就直接超過了,只能跳小於等於n的數字,那麼這個問題就直接退到問題2了。
2,如果n>m;我們要想跳到n級台階,我們可以從n-1級跳一步上來,或者從n-2級跳兩步上來……,或者從n-m級跳m步上來,所以我們可以找出遞迴公式
f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-m);
進一步可以推出:
f(n-1) = f(n-2) + f(n-3) + ... + f(n-m) + f(n-m-1);
化簡結果為:
f(n) = 2f(n-1) - f(n-m-1);(n>m)
所以**我們要分為兩部分,一部分是n>m,另一部分是n<=m,我們來看下**
斐波那契數列又稱**分割數列,他有很多的特性,比如兔子的繁殖,他的通項公式如下
青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。解題思路 1 如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 2 假定第一次跳的是2階,那麼剩下的是n 2個台階,跳法是f n 2 3 總跳法為 f n f n...
青蛙跳台階
之前面試遇到了這種題目,不會,後來搜尋了一下,感覺分析的很好 青蛙跳乙個n階的台階,每次可以跳1階或者2階,求跳完n階y有多少種方法。分析 n 1,f n 1 n 2,f n 2 n 3,f n 3 n 4,f n 5 可以發現 f n f n 1 f n 2 由此也可以推想 比如要跳到第4階樓梯上...
青蛙跳台階
難易程度 中等 題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。在不考慮青蛙健康狀況的情況下 求該青蛙跳上乙個n級的台階總共有多少種跳法。思路 在本題的描述中,青蛙的行動只有兩種可能 一次跳乙個台階或者兩個台階,設n階台階的跳法為 f n 如果第一次跳了一階,那麼剩下的n 1階的跳法為f n...