递归:
class Solution {
public:
int Fibonacci(int n)
{
if(n <= 0)
{
return 0;
}
if(n == 1)
{
return 1;
}
return Fibonacci(n-1)+Fibonacci(n-2);
}
};
基于递归的调用:
许多节点是重复的,浪费了许多空间,用递归计算的时间复杂度是呈n的指数递增的,所以这种方法不好。
改进:我们把已经得到的数列的中间项保存起来,如果下次需要计算,查找一下,不用重复计算。
f(0) = 0;
f(1) = 1;
f(2) = f(1)+f(0);
f(3) = f(2) +f(1);
class Solution {
public:
int Fibonacci(int n)
{
int first = 0;
int second = 1;
if( n == 0)
{
return first;
}
if(n == 1)
{
return second;
}
int result;
for(int i = 2; i <= n; i++)
{
result = first + second;
first = second;
second = result;
}
return result;
}
};