#Z5006. 实现菲波那切数列
实现菲波那切数列
#include <iostream>
using namespace std;
const int N = 1e3;
typedef long long ll;
ll f[N];
int main() {
return 0;
}
这一讲我们来学习如何实现菲波那切数列,实现菲波那切数列不是什么难事,但是我们需要学会的是灵活使用。这一讲带大家计算第 n 个菲波那切数列的值。
这里我们先接收一个整数(这个整数不能太大,否则他可能超过long long,你可以在最后测试测试)。
请在main()函数中写下:
int n;
cin >> n;
这一步我们先初始化数据。
请在cin >> n;下面写下:
f[0] = f[1] = 1;
然后我们根据前面得出的通式f[n]=f[n−1]+f[n−2]
进行计算。这里我们要注意我们for循环的起始和结束,起始是从 2 开始的。因为我们在计算第 f[n] 的时候需要提前计算出 f[n−1] 和 f[n - 2]。所以这里的 n 做小是 2。因为我们需要计算的是 f[n] 。所以循环的结束是循环到 n 。
请在f[0] = f[1] = 1;下面写下:
1for (int i = 2; i <= n; ++i) {
2 f[i] = f[i - 1] + f[i - 2];
3}
这个时候我们就可以输出答案了。
请在return 0;上面写下:
1cout << f[n] << endl;
不知道你们有没有发现,其实我们是可以不用使用数组的。我们来进行一下空间优化。
我们先来初始化数据。
请在return 0;上面写下:
ll a = 1, b = 1, c = 1;
这一步我们和前面的一样,根据公式进行计算。但这里不同的是,我们需要更新 a, ba,b 的值。
请在return 0;上面写下:
for (int i = 2; i <= n; ++i) {
c = a + b;
a = b;
b = c;
}
最后我们输出答案就可以了。
请在rerurn 0;上面写下:
cout << c << endl;
现在你可运行你的程序了。
可以查看第 10 个菲波那切数列的值。是不是和爬楼梯的答案一样?
当然如果你有精力,你也可以看看什么时候会出现溢出。
cout << c << endl;