题目大意
输入 a \texttt{a} a,输出斐波那契额数列的第 a \texttt{a} a 项。
思路1
我最近刚学递归,所以先用递归写了一个代码:
#include<bits/stdc++.h>
using namespace std;
long long k(int a) {
if(a == 1) {
return 1;
}
if(a == 2) {
return 2;
}
a = k(a - 1) + k(a - 2);
return a;
}
int main() {
int l = 1;
scanf("%d",&l);
while(l) {
cout<<k(l)<<endl;
scanf("%d",&l);
}
}
我自己测试了一次,过不去。
递归要经常重复调用一个数,太浪费时间。
思路2
先把 80 \texttt{80} 80 以内的都存在一个列表里面,再进行调用。
代码
#include<bits/stdc++.h>
using namespace std;
long long k[81];
int main() {
k[1] = 1;
k[2] = 2;
for(int i = 3;i <= 80;i++) {
k[i] = k[i - 1] + k[i - 2];
}
int l;
scanf("%d",&l);
while(l) {
cout<<k[l]<<endl;
scanf("%d",&l);
}
}