链接:ac.nowcoder.com/acm/problem…
来源:牛客网
题目描述
求fib数列的第n项,前几项是1,1,2,3,5,每一项都等于前面两项的和
输入描述:
输入一个整数n,n<=46
输出描述:
输出一个整数
示例1
输入
2
输出
1
规律
1,1,2,3,5,每一项都等于前面两项的和
代码1
用递归实现,将第一个和第二个设为1,其他数字设为前两个数之和
#include <bits/stdc++.h>
using namespace std;
int solve(int num){
if(num == 1 || num == 2) return 1;
else return solve(num - 1) + solve(num - 2);
}
int main(){
int n;
cin >> n;
cout << solve(n);
return 0;
}
代码2
用数组实现
注意1
如果下标为0开始,只能num[i+2] = num[i] + num[i+1];不然会越界
修改之后的部分代码
int num[1000] = {1,1};
for(int i = 0;i < n; i++){
num[i+2] = num[i] + num[i+1];
}
cout << num[n-1];
如果下标为2开始,就可以num[i] += num[i-1] + num[i-2];
修改之后的部分代码
int num[1000] = {1,1};
for(int i = 2;i < n; i++){
num[i] += num[i - 1] + num[i - 2];
}
cout << num[n-1];
注意2
也不能重新设置一个新变量来接受,因为除了num[1] 和 num[2] 之外的其他数字都是0
注意3
如果是按照个数来看,那就最后输出num[n]
如果是按照下标来看,那就要减一输出num[n-1]
完整代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int num[1000] = {1,1};
for(int i = 2;i < n; i++){
num[i] += num[i - 1] + num[i - 2];
}
cout << num[n-1];
return 0;
}