题目描述
输入一个整数n, 请你输出斐波那契数列的第n项(从第0项开始, 第0项为0)
首先是递归思路:
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
{
return 0;
}
if (n == 1 || n == 2)
{
return 1;
}
return Fibonacci(n - 2) + Fibonacci(n - 1);
}
};
递归方法的时间复杂度为O(2^n), 随着n的增大呈指数增长,效率比较低
当输入的n比较大时, 可能会导致栈的溢出
并且在递归计算的过程中会出现大量的重复运算!
因此我们考虑动态规划的方法来解决这个问题
首先考虑状态F(n)表示第n项斐波那契数
递推公式就是
F(n) = F(n - 1) + F(n - 2);
给定初始值
F(1) = F(2) = 1;
返回的结果就是F(n)了
class Solution {
public:
int Fibonacci(int n) {
if (n == 0)
{
return 0;
}
if (n == 1 || n == 2)
{
return 1;
}
int an_2 = 1;
int an_1 = 1;
int an;
for (int i = 2; i < n; ++i)
{
an = an_2 + an_1;
an_2 = an_1;
an_1 = an;
}
return an;
}
};