題目描述:
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
題目解析:
比如只有乙個台階,這個時候這只青蛙沒有第二種選擇,只能一次跳1級台階,也就是只有一種跳法。
比如共有2個台階呢?此時,這只青蛙就有兩種選擇了,第一種選擇是一次跳1級,跳兩次。第二種選擇是一次跳2級,跳一次。
.......
那麼共有n級台階呢,通過大腦想這個過程實在是過於複雜,尤其n特別大時,已經超過了人腦的計算範圍,那麼我們就只好借助計算機的超高能力的計算來得到結果了,我們分析一下。
倒過來思考一下,比如這只青蛙已經跳到了第n級台階,此時它正站在第n級台階上沾沾自喜呢,那麼,它的上一步是什麼呢?因為青蛙一次只能跳1或2級台階,所以,上一步這只青蛙一定在第n-1或者n-2級台階上。
因此我們得到:
f(n)=f(n-1)+f(n-2)
這個公式大家應該不會陌生吧,顯然,有了這個公式,就很容易實現遞迴演算法了。
遞迴演算法實現需要兩個條件,第一是初始條件,第二就是遞迴公式了。下面我們來看看初始條件。
在f(n)=f(n-1)+f(n-2)這個公式裡,當n大於等於3時,f(n-1)和f(n-2)裡的n-1大於等於2,n-2大於等於1。所以這個公式適用於n大於等於3的情況。f(1)是指共1級台階幾種走法,顯然等於1,就是一種走法。f(2)=2,前面討論過了。**如下:
int jumpfloor(int number)
}
是不是很簡單啊!
確實,遞迴演算法確實簡單,容易理解,但是它的時間複雜度比較大,這個遞迴裡有很多重複的計算,還有不斷進棧退棧的過程。想一想能不能不用遞迴直來直去的得到答案呢?
當然可以!
還是借助f(n)=f(n-1)+f(n-2)這個公式:
台階總數:1 2 3 4 5 6
走法共計:1 2 3 5 8 13
類似於賠多納妾數列,**如下:
int jumpfloor(int number) ); })();
'); (window.slotbydup = window.slotbydup || ).push(); })();
程式設計師面試題 跳台階問題
題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 題目解析 比如只有乙個台階,這個時候這只青蛙沒有第二種選擇,只能一次跳1級台階,也就是只有一種跳法。比如共有2個台階呢?此時,這只青蛙就有兩種選擇了,第一種選擇是一次跳1級,...
程式設計師面試題 跳台階問題
題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 題目解析 比如只有乙個台階,這個時候這只青蛙沒有第二種選擇,只能一次跳1級台階,也就是只有一種跳法。比如共有2個台階呢?此時,這只青蛙就有兩種選擇了,第一種選擇是一次跳1級,...
程式設計師面試題精選(23) 跳台階問題
題目 乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。分析 這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2...