解法1:效率低的解法
复杂度
速度十分缓慢,重复计算太多
代码
//未考虑溢出和取模
class Solution {
public:
int fib(int n) {
if(n <= 0)
return 0;
if(n == 1)
return 1;
return fib(n - 1) + fib(n - 2);
}
};
解法2:
复杂度:
时间复杂度O(n)
代码
class Solution {
public:
int fib(int n) {
if(n <= 0)
return 0;
if(n == 1)
return 1;
//fib(n - 1)与fib(n - 2)
long long fibNMinusOne = 1;
long long fibNMinusTwo = 0;
long long fibN = 0;
for(int i = 2; i <= n; i++){
//新的值都是在这里算出,只要这里取模就够了
fibN = (fibNMinusOne + fibNMinusTwo) % 1000000007;
fibNMinusTwo = fibNMinusOne ;
fibNMinusOne = fibN ;
}
return fibN;
}
};