斐波那契数,通常用 F(n)
表示,形成的序列称为斐波那契数列。该数列由 0
和 1
开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
给定 N
,计算 F(N)
。
解法一、递归
class Solution {
public:
int fib(int N) {
int xx;
if(N == 0)
return 0;
else if(N == 1)
return 1;
else
return xx = fib(N - 1) + fib(N - 2);
}
};
解法二、上面的递归算法,每次都要把所有项算一遍,即计算f(1000)需要讲前999个全部计算一遍,计算f(1001又需要再计算一次,这种算法越到后面越慢。我们可以将已经计算过的结果保存到一个数组中,以空间换取时间
class Solution {
public:
int fib(int N) {
vector<int> res;
if(N == 0)
return 0;
if(N == 1)
return 1;
res = {0,1};
for(int i = 2;i <= N;i++){
int xx = res[i -1] + res[i - 2];
res.push_back(xx);
}
return res[N];
}
};
运行结果: