題目
乙隻青蛙一次可以跳上1級台階,也可以跳上2級,求該青蛙跳上乙個n級的台階共有多少種跳法(先後次序不同算不同的結果)?
方法一(遞迴)
思路:一共n階台階,青蛙每次可以跳1級或者2級,則每次剩下(n-1)級、(n-2)級,若剩下(n-1)級,則重複還剩n級的選擇。so,用遞迴。
f(n)=f(n-1)+f(n-2)。(前提是先後次序不同算不同的結果)
intf(
int data)
方法二
思路:第一種方法是從後往前算,例:已知一共4級,則要算3級和2級……
這樣一來,很多級的跳法重複計算,比如算f(4)時會計算f(2),算f(5)時也會計算f(2),增加計算時間。為了減少計算時間,從前往後算,比如要算f(5),可以先算f(1),f(2),f(3),f(4),算到f(5)。
public
intgetresultbydp
(int n)
if(n ==1)
if(n ==2)
int a =1;
int b =2;
int temp =0;
for(
int i =
3; i < n+
1; i++
)return temp;
}
方法三(動態樹演算法)
public
intgetresultbymap
(int n, map map)
if(n ==1)
if(n ==2)
if(map.
containskey
(n))
else
}
方法四(斐波那契數列的迭代演算法)
#include
using
namespace std;
intjumpfloor
(int n)
return f;
}int
main()
乙隻青蛙一次可以跳上1級台階,也可以跳上2級,它也可以跳上n級台階,求該青蛙跳上乙個n級的台階共有多少種跳法?
//動態規劃
#include
using
namespace std;
intf
(int data)
intmain()
跳台階問題
題目 乙個台階總共有n級,如果一次可以跳1級,也可以跳2級。求總共有多少總跳法,並分析演算法的時間複雜度。分析 這道題最近經常出現,包括microstrategy等比較重視演算法的公司都曾先後選用過個這道題作為面試題或者筆試題。首先我們考慮最簡單的情況。如果只有1級台階,那顯然只有一種跳法。如果有2...
走台階問題
舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 上面只給出了有多少種走法,那麼具體每一種走法是怎麼走的呢?比如n 4時,五種走法分別如下 1,1,1,1 1,...
走台階問題
舉個例子,假設有3個台階,則有三種走法 分別是,1 1 1,1 2,2 1。很簡單的一道題,學過組合數學的人很快就能想到,這是乙個遞推關係。假設走完k個台階有f k 種走法。於是有如下公式 遞迴演算法int count unsigned intn 非遞迴演算法int count unsigned i...