题解 | 牛牛学数列5
牛牛学数列5
https://www.nowcoder.com/practice/6db6674518a9456198c166bcd0d2aaa1
#include <iostream>
// 移除无用头文件 linux/limits.h(代码中未使用)
using namespace std;
// 斐波那契计算函数:n≥1返回对应值,n≤0返回-1(标记非法输入)
int feibonaqi(int n) {
// 处理非法输入:n≤0,覆盖所有控制路径,避免编译错误
if (n <= 0) {
return -1;
}
// 前两项:n=1、n=2,直接返回1(合并n<3分支,简化代码)
if (n < 3) {
return 1;
}
// 初始化前两项:先赋值再计算,避免未定义行为
int f1 = 1, f2 = 1, result;
// 循环迭代:从第3项到第n项,推导每一项的值
// 循环次数 = n-2(前两项已确定,无需循环)
for (int i = 3; i <= n; i++) {
result = f1 + f2; // 当前项 = 前两项之和
f1 = f2; // 前一项后移:原f2变为新f1
f2 = result; // 当前项后移:原result变为新f2
}
// 循环结束,result即为第n项,返回结果(覆盖所有路径)
return result;
}
int main() {
int n;
cin >> n;
int res = feibonaqi(n);
// 判读是否为非法输入
if (res == -1) {
cout << "错误:输入的n必须是正整数!" << endl;
return 1; // 非0退出,标记程序异常
}
// 输出正确结果
cout << res << endl;
return 0;
}
