斐波那契數列(1,1,2,3,5,8,...)
用函式表示為f(n)=f(n-1)+f(n-2) (n>2,f(1)=1,f(2)=1)
首先一般想到遞迴演算法:
//////
use recursive method to implement fibonacci
//////
///static
int fn(int n)
if (n == 1||n==2)
return
checked(fn(n - 1) + fn(n - 2)); //
when n>46 memory will overflow
}遞迴演算法時間複雜度是o(n2), 空間複雜度也很高的。當然不是最優的。
自然我們想到了非遞迴演算法了。
一般的實現如下:
//////
use three variables to implement fibonacci
//////
///static
int fn1(int n)
int a = 1;
int b = 1;
int c = 1;
for (int i = 3; i <= n; i++)
return c;
}這裡演算法複雜度為之前的1/n了,比較不錯哦。但是還有可以改進的地方,我們可以用兩個區域性變數來完成,看下吧:
//////
use less variables to implement fibonacci
//////
///static
int fn2(int n)
int a = 1;
int b = 1;
for (int i = 3; i <= n; i++)
return b;
}好了,這裡應該是最優的方法了。
值得注意的是,我們要考慮記憶體洩漏問題,因為我們用int型別來儲存fibonacci的結果,所以n不能大於46(32位作業系統)
斐波那契數列 斐波那契數列python實現
斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...
C 實現斐波那契數列
斐波那契數列 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368.長相簡單,實現簡單,網上童鞋們的搞法多數都是直觀的遞迴,逐個計算實現getfibonaccisequen...
實現斐波那契數列
方法 一 通過迭代器實現 class fibiterator object def init self,n self.n n 是使用current儲存當前數列中第幾個數 self.current 0 使用num1儲存數列中前乙個數,初始值為0 self.num1 0 使用num2儲存數列中後乙個數,...