樹老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數
例如:樓梯一共有3級,他可以每次都走一級,或者第一次走一級,第二次走兩級也可以第一次走兩級,第二次走一級,一共3種方法。輸入包含若干行,每行包含乙個正整數n,代表樓梯級數,1 <= n <= 30不同的走法數,每一行輸入對應一行輸出
樣例輸入
5 8 10
樣例輸出
8 34 89分析
當樓梯為1級時,一共有1種方法;
(每次都走1級)
當樓梯為2級時,一共有2種方法;
(第一次走1級,第二次走1級;每次都走2級)
當樓梯為3級時,一共有3種方法;
(每次都走1級;第一次走1級,第二次走2級;一次走2級,第二次走1級)
當樓梯為4級時,一共有5種方法;
(每次都走1級;第一次走1級,第二次走1級,第三次走2級;第一次走1級,第二次走2級,第三次走1級;第一次走2級,第二次走1級,第三次走2級;第一次走2級,第二次走2級,第三次走1級)
綜上所述,將資料總結為以下**。
m(樓梯級數) 1 2 3 4 5 6 7 ......
n(走法總數) 1 2 3 5 8 13 21 ......
通過以上分析,我們可以看見:這是乙個典型的遞迴問題。由資料可以得到以下規律:
f(n)=1;(n=1)
f(n)=2;(n=2)
f(n)=f(n-1)+f(n-2);(n>=3)
#include
intcalculate
(int n)
intmain()
return0;
}
關鍵是在文字語言中提取關鍵資訊,找到數學規律—遞迴!
遞迴的基本思想就是把規模大的問題轉化為規模小的相似的子問題來解決,說白了大事化小小事化了。遞迴最重要的是要有明確的結束條件(出口),否則就會導致無限遞迴的情況。
爬樓梯問題
ok,前段時間在一篇blog上看到乙個關於樓梯的面試題,大概內容如下 現有乙個人,規定他上樓梯時只能一步走乙個台階或者兩個台階。要求 給定任意樓梯的階數,求共有多少種方法爬完樓梯。如果有經驗可以看出,這是一道遞迴的題目。不過這個遞迴 程式怎麼寫呢?我的思路是可以這樣想,不管他前面 怎麼爬,最後總是要...
爬樓梯問題
爬樓梯問題,每次可以走1步或者2步,爬上n層樓梯的總方法,這題就是乙個變相的fibonacci問題。當n 1時,有1種方法,即直接走1步 當n 2時,有2方法 連續走2步,或直接走兩步 對於n,設f n 為總方法,則 f n f n 1 f n 2 ps f n 1 即第一次走一步的走法,f n 2...
爬樓梯問題
蒜頭君自從春節回來以後,體重就像加了特技一樣duang duang 地暴增起來。於是小蒜頭打算每天爬樓梯來燃燒體內的脂肪 咦?蒜怎麼會有脂肪 蒜頭在爬樓梯的時候腦洞大開,因為蒜頭腿短,爬樓梯的時候一次只能邁1級或2級台階,它就想到了,假如一共有n級台階的話,它一共有多少種方法能夠爬到樓梯頂部呢?聰明...