分析:這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。
首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2級台階,那就有兩種跳的方法了:一種是分兩次跳,每次跳1級;另外一種就是一次跳2級。
現在我們再來討論一般情況。我們把n級台階時的跳法看成是n的函式,記為f(n)。當n>2時,第一次跳的時候就有兩種不同的選擇:一是第一次只跳1級,此時跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另外一種選擇是第一次跳2級,此時跳法數目等於後面剩下的n-2級台階的跳法數目,即為f(n-2)。因此n級台階時的不同跳法的總數f(n)=f(n-1)+(f-2)。
我們把上面的分析用乙個公式總結如下:
/ 1 n=1
f(n)= 2 n=2
\ f(n-1)+(f-2) n>2
分析到這裡,相信很多人都能看出這就是我們熟悉的fibonacci序列。
public class jumpfloor
else if(n==1)
else
}
分析:用fib(n)表示青蛙跳上n階台階的跳法數,青蛙一次性跳上n階台階的跳法數1(n階跳),設定fib(0) = 1;
當n = 1 時, 只有一種跳法,即1階跳:fib(1) = 1;
當n = 2 時, 有兩種跳的方式,一階跳和二階跳:fib(2) = fib(1) + fib(0) = 2;
當n = 3 時,有三種跳的方式,第一次跳出一階後,後面還有fib(3-1)中跳法; 第一次跳出二階後,後面還有fib(3-2)中跳法;第一次跳出三階後,後面還有fib(3-3)中跳法
fib(3) = fib(2) + fib(1)+fib(0)=4;
當n = n 時,共有n種跳的方式,第一次跳出一階後,後面還有fib(n-1)中跳法; 第一次跳出二階後,後面還有fib(n-2)中跳法..........................第一次跳出n階後,後面還有 fib(n-n)中跳法.
fib(n) = fib(n-1)+fib(n-2)+fib(n-3)+..........+fib(n-n)=fib(0)+fib(1)+fib(2)+.......+fib(n-1)
又因為fib(n-1)=fib(0)+fib(1)+fib(2)+.......+fib(n-2)
兩式相減得:fib(n)-fib(n-1)=fib(n-1) *****》 fib(n) = 2*fib(n-1) n >= 2
遞迴等式如下:
跳台階問題 遞迴演算法
首先我們說說什麼是遞迴。程式呼叫自身的程式設計技巧稱為遞迴 recursion 遞迴做為一種演算法在 程式語言 中廣泛應用。乙個過程或 函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題...
跳台階問題
題目 乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。分析 這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2...
跳台階問題
有n個階梯,青蛙一次可以跳乙個或者兩個,求總共有多少種跳法可以到達頂端?思路 如果只有一階,那麼只有一種跳法 如果有2階,那麼有2中跳法 跳1階再跳1階,一次跳2階 那麼如果有n階呢?假設對於n階的階梯,我們有f n 中跳法 那麼n階時,我們考慮如果第一次跳共有兩種選擇 第一次跳了1階,剩下n 1階...