C++实现斐波那契数列输出全1 代码逻辑错误排查
斐波那契数列输出恒定为1的根因排查
核心逻辑错误定位
逐行拆解原代码循环内的变量流转过程,问题根源来自两处完全混乱的变量更新操作:
- 冗余代码导致变量状态锁死
原代码循环内的更新步骤做了无意义的重复赋值,还错误引入减法推导新值:- 先执行
num1 = num2把num1改成旧num2的值,最后又执行num1 = num_temp(temp存的就是旧num2)把刚才的修改覆盖,这步操作完全无效 - 用
num2 = num_next - num1计算新num2值完全多余:num_next本来就是通过num1 + num2直接计算出来的下一项,本身就可以直接作为新的num2值,根本不需要反向减法推导;且因为前面num1已经被临时修改过,减法计算出的num2值完全偏离预期
上述逻辑会让num1和num2的状态永远在(0,1)和(1,0)两个状态间来回切换,永远算不出更大的数列值,导致每次输出的num_next始终为1,出现全1的恒定输出。
- 先执行
- 初始输出值偏移
原代码将num_next的初始值设为1,循环第一轮就输出1,完全跳过了斐波那契数列的首项0,和预期输出的前n项序列不匹配。
修正方案
去掉冗余的临时变量操作,按照斐波那契数列的标准迭代逻辑更新变量,调整输出顺序保证首项正确输出:
#include <iostream> using namespace std; int main() { int num1 = 0; int num2 = 1; int n; cin >> n; for (int i = 0; i < n; i++){ // 输出当前序列值,按预期格式添加分隔符 cout << num1 << (i == n - 1 ? "" : ", "); // 标准迭代流程:计算下一项,平移滑动窗口的两个指针 int num_next = num1 + num2; num1 = num2; num2 = num_next; } return 0; }
输入n=9时,修正后代码的输出和预期完全一致:0, 1, 1, 2, 3, 5, 8, 13, 21
内容的提问来源于stack exchange,提问作者syeda minahil
相关产品推荐
相关产品推荐

