You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++用递归函数实现斐波那契数列代码异常原因求解

斐波那契递归实现问题排查及修正

原代码存在的问题

  • 误用循环导致死循环:递归函数内部使用while(num > 0)作为判断条件,但循环体内没有修改当前层级局部变量num的值,每次递归调用返回后,当前层级的num仍然大于0,会无限重复执行递归调用和打印逻辑,最终会导致栈溢出或程序卡死。
  • 缺少正确的递归终止逻辑:原代码没有明确的递归出口,即使去掉while循环,也会因为无终止条件持续递归直到栈溢出。
  • 计数逻辑不符合输出需求:需求是忽略前两个初始元素,从第二个1开始输出,原代码的计数逻辑没有做对应偏移,输出的元素数量和起始位置都不符合预期。

修正方案说明

修正后的代码调整了三个核心逻辑:

  1. 移除错误的while循环,改用if做单次判断,符合递归单次执行的逻辑特性
  2. 先对计数变量num做自减,再判断是否大于1:刚好可以跳过前两个初始元素(0、1),从目标起始位置a(2)=1开始输出指定数量的元素
  3. 明确递归终止条件:当num <= 1时直接终止递归,不再向下调用

完整可运行修正代码

#include <iostream>
using namespace std;

void fibo(int num, int d1, int d2);

int main() {
    int d1 = 0;
    int d2 = 1;
    int number = 0;
    cout << "Enter the number of elements in the Fibonacci Series: ";
    cin >> number;
    fibo(number, d1, d2);
    return 0;
}

void fibo(int num, int d1, int d2){
    int d3 = d1 + d2;
    num--;
    if(num > 1){
        cout << " " << d3;
        fibo(num, d2, d3);
    }
};

内容的提问来源于stack exchange,提问作者Tahuti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:54:02