斐波那契递归函数计算结果错误,请求技术排查
问题分析与修复方案
嘿,别懊恼,我一眼就揪出这个导致错误的小问题啦!这其实是新手写递归时很容易犯的笔误,完全算不上“低级”,放宽心~
错误根源
你的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
相关产品推荐
相关产品推荐

