题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39
解法一:使用递归回溯解法
网上的资料很多,不多解释,代码如下:
但是这种方法的时间与空间复杂度肯定很高,重复计算太多。
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
{
return 0;
}
if (n == 1 || n == 2)
{
return 1;
}
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
};
解法二:正序加法,一直加到第 n 个数
代码如下:
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
{
return 0;
}
if (n == 1 || n == 2)
{
return 1;
}
int f = 1, g = 1;
int num = 0;
for (int index = 3; index <= n; index++)
{
num = f + g;
f = g;
g = num;
}
return num;
}
};
时间复杂度:O(lgn)
空间复杂度:O(n)