You need to enable JavaScript to run this app. C++实现斐波那契数列输出全1 代码逻辑错误排查
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 07:27:03