题目描述:
输入一个整数 n ,求斐波那契数列的第 n项。
假定从0开始,第0项为0。(n<=39)
样例
输入整数 n=5
返回 5
(PS:本来这么简单的题不用写题解,强迫症逐题做,还是写下吧)。
分析:
方法一:
一般的递归写法:时间复杂度比较难推导,邓公习题集上有推导。
class Solution {
public:
int Fibonacci(int n) {
if(n < 2) return n;
return Fibonacci(n - 2) + Fibonacci(n - 1);
}
};
方法二:
动态规划:时间复杂度为O(n)。(当然使用尾递归优化的记忆化搜索写法复杂度也是一样)
class Solution {
public:
int Fibonacci(int n) {
if(n < 2) return n;
int f = 0,g = 1;
n--;
while(n--){
g = f + g;
f = g - f;
}
return g;
}
};
方法三:
矩阵快速幂:时间复杂度约为O(logn)