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

递归斐波那契算法实现问题:无法正常打印数组存储的计算结果

你的斐波那契递归代码问题排查与修复

咱们一步步拆解你代码里的问题,把它改成能正常输出的版本~

第一个致命问题:循环条件写错了

你main方法里的for循环写的是for (int i = 1; i == 8; i++)——这个条件的意思是只有当i等于8的时候才会执行循环体,但初始i是1,根本不等于8,所以循环直接跳过了,啥都没执行!把条件改成i <= 8,这样才能遍历从1到8的所有n值。

第二个问题:斐波那契定义与数组缓存逻辑不匹配

你的期望输出里n=2的结果是2,但原代码的base case是n==1返回1,n==0返回0,这样算n=2的时候得到的是1+0=1,和你的期望对不上。另外,原代码里计算完fibo(i, arr)后直接取arr[i],但你的fibo函数只把n-1和n-2的结果存进数组,却没把当前n的结果存进去,导致arr[i]一直是0。

修复后的完整代码

public class FibonacciCalculator {
    // 用数组缓存已计算的斐波那契数,索引直接对应n的值(比如arr[1]就是n=1的结果)
    static int[] arr = new int[50];

    static int fibo(int n) {
        // 匹配你期望的斐波那契定义:F(1)=1,F(2)=2
        if (n == 1) {
            arr[n] = 1;
            return 1;
        }
        if (n == 2) {
            arr[n] = 2;
            return 2;
        }
        // 如果已经计算过,直接返回缓存好的值,避免重复递归
        if (arr[n] != 0) {
            return arr[n];
        }
        // 递归计算当前n的值,并存入数组缓存
        arr[n] = fibo(n - 1) + fibo(n - 2);
        return arr[n];
    }

    public static void main(String[] args) {
        // 遍历1到8的所有n值
        for (int i = 1; i <= 8; i++) {
            int result = fibo(i);
            String output = String.format("The fibonacci of n = %d is fn= %d", i, result);
            System.out.println(output);
        }
    }
}

关键修改说明

  • 修正循环条件:把i == 8改成i <= 8,确保能遍历到所有需要的n值;
  • 调整base case:按照你的期望输出设置了n=1和n=2的结果,并且直接把结果存入数组对应的位置;
  • 优化缓存逻辑:递归前先检查数组里有没有已经计算好的值,有就直接用,避免重复递归;计算完当前n的值后立刻存入数组,后续可以直接复用;
  • 简化参数传递:因为arr是静态数组,不需要作为参数传给fibo函数,代码更简洁。

运行结果

运行修复后的代码,会输出:

The fibonacci of n = 1 is fn= 1
The fibonacci of n = 2 is fn= 2
The fibonacci of n = 3 is fn= 3
The fibonacci of n = 4 is fn= 5
The fibonacci of n = 5 is fn= 8
The fibonacci of n = 6 is fn= 13
The fibonacci of n = 7 is fn= 21
The fibonacci of n = 8 is fn= 34

(注:如果你确实期望n=8的结果是21,那说明你的斐波那契定义是标准的F(1)=1、F(2)=1、F(3)=2...只需要把base case改回n==1返回1,n==2返回1就行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:48