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

带3个参数的递归实现斐波那契数列时输出全为0的问题

问题分析与修正方案

我来帮你定位代码里的问题,这两个关键错误导致了输出全是0:

1. 递归时完全忽略传入参数,每次都重置变量

你在fibo函数内部定义了int n1=0,n2=1,ele=0;,这意味着每次递归调用这个函数,不管你传入的a和b是什么,n1和n2都会被重新初始化为0和1。你传入的参数根本没起到作用,自然每次打印的都是初始值0。

2. 缺少递归终止条件

你的代码里只处理了n>=1的情况,但没有定义n<1时的终止逻辑,递归会一直调用fibo(n-1,...)直到栈溢出(不过在溢出前会一直打印0)。


修正后的代码

我们需要利用传入的a和b来维护斐波那契数列的当前状态,同时加上明确的终止条件:

#include<stdio.h>
void fibo(int n ,int a ,int b) {
    // 终止条件:当需要输出的元素数量为0时停止递归
    if(n < 1){
        return;
    }
    // 打印当前的斐波那契数(也就是传入的a)
    printf(" %d", a);
    // 递归调用:传递下一组斐波那契数,同时减少需要输出的元素数量
    fibo(n-1, b, a + b);
}
int main(){
    fibo(10,0,1);
    return 0;
}

代码逻辑说明

  • 第一次调用fibo(10,0,1):打印0,然后递归调用fibo(9,1, 0+1=1)
  • 第二次调用:打印1,递归调用fibo(8,1,1+1=2)
  • 第三次调用:打印1,递归调用fibo(7,2,1+2=3)
  • ……以此类推,直到n减到0时停止递归

运行这段代码,你会得到正确的前10个斐波那契数:0 1 1 2 3 5 8 13 21 34

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:26:28