1、最簡單,容易理解的方法
斐波那契數列的標準公式爲:
F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
class Solution {
public:
int Fibonacci(int n) {
if (n <= 1)
return n;
return Fibonacci(n-1) + Fibonacci(n-2);
}
};
複雜度
時間複雜度:O(2^n)O(2n)
空間複雜度:O(1)O(1)
2、優化方法
定義兩個變量,pre1代表f(n-2),pre2代表f(n-1);
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
int pre1 = 0, pre2 = 1 ;
int result;
for(int i = 2; i <= n ; i++)
{
result = pre2 + pre1;
pre1 = pre2;
pre2 = result;
}
return result;
}
};
複雜度
時間複雜度:O(n)O(n)
空間複雜度:O(1)O(1)
3、進一步優化
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
int temp = 0, result = 1 ;
for(int i = 2; i <= n ; i++)
{
result = temp + result;
temp = result - temp;
}
return result;
}
};
複雜度
時間複雜度:O(n)O(n)
空間複雜度:O(1)O(1)