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

斐波那契递归函数计算结果错误,请求技术排查

问题分析与修复方案

嘿,别懊恼,我一眼就揪出这个导致错误的小问题啦!这其实是新手写递归时很容易犯的笔误,完全算不上“低级”,放宽心~

错误根源

你的Fibonacci函数里,else分支的返回语句写错了:

return Fibonacci(n-1)+(n-2); // 这里是核心错误!

你直接把n-2当成了斐波那契数列的第n-2项,但实际上应该递归调用Fibonacci(n-2)才对。咱们来捋一遍错误的计算过程,就能明白为什么第5项会返回7:

  • Fibonacci(5) = Fibonacci(4) + 3
  • Fibonacci(4) = Fibonacci(3) + 2
  • Fibonacci(3) = Fibonacci(2) + 1
  • Fibonacci(2) = Fibonacci(1) + 0 → 1 + 0 = 1
    倒推回去就是:Fibonacci(3)=1+1=2,Fibonacci(4)=2+2=4,Fibonacci(5)=4+3=7,完全匹配你看到的错误结果。

修复后的完整代码

只需要把else分支的返回语句改成调用Fibonacci(n-2),我还顺便加了两个小优化避免其他潜在问题:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here: 
    int n=0; 
    try{ 
        n= Integer.parseInt(jTextField1.getText()); 
    } catch(NumberFormatException e){ 
        jTextField2.setText("Please enter valid integers.");
        return; // 加return避免异常后继续执行后续代码
    } 
    // 新增非负整数判断,符合斐波那契数列的定义
    if(n < 0){
        jTextField2.setText("Please enter a non-negative integer.");
        return;
    }
    jTextField2.setText("Fibo value is " + Fibonacci(n)); 
}

private int Fibonacci(int n){ 
    System.out.println(n+"N"); 
    if (n <=1) { 
        return n; 
    } else{ 
        return Fibonacci(n-1) + Fibonacci(n-2); // 修正后的递归调用
    } 
}

额外小建议

如果之后需要计算较大的n值,递归实现会因为大量重复计算导致性能拉胯,到时可以试试迭代法或者记忆化递归的方式优化哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:06:54