fibonacci 是演算法中的基礎問題。還有一些問題本質是fibonacci 問題,也就是遞迴問題。在此我們一併總結**。
1. fibonacci 數列
問題描述:
數列位數序號 1,2,3,4,5,6,...
fibonacci 數列 1,1,2,3,5,8,...
fibonacci 數列的性質很簡單,就是從第三位起,數列中每一項等於前兩項的和,如 第4項 = 第3項 + 第2項。
題目的要求是,輸入乙個整數n,輸出fibonacci 數列的第n項(從0開始,第0項為0)。
解決思路:
函式中遞迴呼叫自己,求出最終解。
def fibonacci(n):
if n < 2:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
2. 初級青蛙跳問題描述:
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
解決思路:
乍一看,問題複雜。我們不妨做乙個帶入:
台階跳法共計跳法1
122 33
45我們觀察表的前2列,很容易得到規律,這是個fibonacci 問題。從第3階開始,第n階 = 第n-2階 + 第n-1階
我們依然用遞迴的思路寫出**
def jumpfloor(n):
if n < 3:
return n
else:
return jumpfloor(n-2) + jumpfloor(n-1)
3. **青蛙跳問題描述:
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
解決思路:
這似乎比初級青蛙跳複雜了很多,我們依然帶入尋找規律:
台階跳法共計跳法1
122 34
48我們進一步對跳法進行抽象。並令跳
進而得到
令兩式相減得到
如此,遞迴就可以很好的解決這個問題。
def jumpfloor(n):
if n < 2:
return n
else:
return 2 * jumpfloor(n-1)
每日一演算法 Fibonacci數列
fibonacci為1200年代的歐洲數學家,在他的著作中曾經提到 若有乙隻免子每個月生乙隻小免子,乙個月後小免子也開始生產。起初只有乙隻免子,乙個月後就有兩隻免子,二個月後有三隻免子,三個月後有五隻免子 小免子投入生產 如果不太理解這個例子的話,舉個圖就知道了,注意新生的小免子需乙個月成長期才會投...
計算Fibonacci數列
上機內容 用動態分配空間的方法計算fibonacci數列的前30項並儲存到動態分配的空間中 上機目的 學習fibonacci數列演算法 我的程式 includeusing namespace std void main int p new int 30 p 1 p 1 1 cout p p 2 fo...
Fibonacci數列 餘數
fibonacci數列的遞推公式為 fn fn 1 fn 2,其中f1 f2 1。當n比較大時,fn也非常大,現在我們想知道,fn除以10007的餘數是多少。輸入格式 輸入包含乙個整數n。輸出格式 輸出一行,包含乙個整數,表示fn除以10007的餘數。說明 在本題中,答案是要求fn除以10007的餘...