斐波那契數列的實現

2021-08-14 16:10:28 字數 1462 閱讀 1250

1、**

(1)遞迴版本:存在重複計算,**簡單,但是不可取

int fibonacci1(int n) 

(2)迴圈迴圈版本:計算效率高。

// 非遞迴迴圈的版本

int fibonacci2(int n)

return two;

}

2、思路

這個題目主要很容易想到遞迴函式的做法,但是遞迴在這裡很不實用, 會存在很多的重複計算,比如計算f(8),那麼f(7)到f(2)都算被計算2次,而且都是遞迴計算,會大量浪費記憶體棧。關於遞迴和迴圈的比較:

(1)遞迴:**簡潔,思路一般清晰。但是函式遞迴呼叫會有時間和空間的消耗,在記憶體棧中儲存和彈出資料都是需要時間和記憶體的;每個程序的記憶體棧大小是固定的,如果遞迴的層數太多,就會造成棧溢位。

(2)迴圈:**可能不好實現,但是記憶體小,**有時候會比較冗長,但是效率高。

3、應用:跳台階問題

(1)問題描述:乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

(2)思路:從最後一步開始分,最後一步如果一次性跳了1步,那麼剩餘的n-1步就是f(n-1);如果最後一步一次性跳了2步,那麼剩餘的n-2步就是f(n-2),最後可以得到公式:f(n)=f(n-1)+f(n-2),典型的數列的應用。

(3)**:

int jumpfloor(int number) 

return two;

}

3、應用:矩形覆蓋

(1)問題:我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

(2)**:同樣直接應用斐波那契數列

if(number==0)

return

0; if(number==1)

return

1; if(number==2)

return

2; int one=1, two=2;

for(int i=3;i<=number;i++)

return two;

}4、擴充套件

(1)問題描述:乙隻青蛙一次可以跳上1級台階,也可以跳上2級…..也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。

(2)思路:從最後一步開始分,最後一步如果一次性跳了1步,那麼剩餘的n-1步就是f(n-1);如果最後一步一次性跳了2步,那麼剩餘的n-2步就是f(n-2),如果最後一步是一次性跳了n-1步那麼,剩餘的就是f(1)=1。最後可以得到公式:f(n)=f(n-1)+f(n-2)+….f(2)+f(1)+1,典型的數列的應用。根據數列的公式可以推出:f(n)=2^(n-1)

斐波那契數列 斐波那契數列python實現

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

實現斐波那契數列

方法 一 通過迭代器實現 class fibiterator object def init self,n self.n n 是使用current儲存當前數列中第幾個數 self.current 0 使用num1儲存數列中前乙個數,初始值為0 self.num1 0 使用num2儲存數列中後乙個數,...

迴圈斐波那契數列 斐波那契數列應用

什麼是斐波那契數列 斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144 這個數列從第3項開始,每一項都等於前兩項之和 台階問題 有一段樓梯有10級台階,規定每一步只能跨一級或兩級,要登上第10級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...