主题:斐波那契数列
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll fi(int x) {
if(x == 1 || x == 2)
return 1;
return fi(x - 1) + fi(x - 2);
}
int main(){
int n;
cin>>n;
while(n--) {
int a;
ll res = 0;
cin>>a;
res = fi(a);
cout<<res<<endl;
}
}
假设输入的a不会超过30,完成下面的判断题和选择题
判断题
1.该程序使用的方法是递推。()
A.正确
B.错误
2.第3行等价于"#define ll long long;"。()
A.正确
B.错误
3.第14行可以改写为"int res=0;"而不会影响结果的正确性。()
A.正确
B.错误
4.执行程序总是会输出一个整数。()
A.正确
B.错误
5.如果a=5,函数fi会被执行9次。()
A.正确
B.错误
选择题
6.输入为"2"和"6 8"时,输出为。
A.“6 16”
B.“8 16”
C.“6 21”
D.“8 21”
答案+解析
1.错。本题使用的是递归,从大到小+回溯求得答案
2.错。"#define"语句的末尾不需要分号。这样原来为"ll n;"的语句会被换成:“long long; n;”,不符合语法
3.对。当输入的a很大时,会出现答案爆int的情况。但题目说输入的a<=30,经计算发现还在int范围内。
4.错。程序虽没有可以形成小数的除法等运算,但如果输入的n<=0,则无输出。
5.对,如下:
s[fi(1)]: 1次
s[fi(2)]: 1次
s[fi(3)]: 3次 = 调用fi(3)+s[fi(1)]+s[fi(2)]
s[fi(4)]: 5次 = 调用fi(4)+s[fi(2)]+s[fi(3)]
s[fi(5)]: 9次 = 调用fi(4)+s[fi(3)]+s[fi(4)]
6.D 可知,斐波那契数列的前8项为:1 1 2 3 5 8 13 21,和D符合
End
这里是 YLCHUP,谢谢大家!