C 完美實現斐波那契數列

2022-02-17 19:37:03 字數 1006 閱讀 2907

斐波那契數列(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儲存數列中後乙個數,...