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級台階有幾種不同的走法?這就是乙個斐波那契數列 登上第一級台階有一...