Java 使用递归错误的斐波那契级数? 公共类Fibonacci2{ 静态整数fib(整数n){ 如果(n==1 | | n==2){ 申报表(1); } 返回fib((n-1)+fib(n-2)); } //堆栈溢出错误// 公共静态void main(字符串[]args){ int i,n=7; 对于(i=1;i

Java 使用递归错误的斐波那契级数? 公共类Fibonacci2{ 静态整数fib(整数n){ 如果(n==1 | | n==2){ 申报表(1); } 返回fib((n-1)+fib(n-2)); } //堆栈溢出错误// 公共静态void main(字符串[]args){ int i,n=7; 对于(i=1;i,java,Java,您在调试器中单步执行代码,您将看到 public class Fibonacci2 { static int fib(int n) { if(n==1 || n==2) { return(1); } return fib((n-1)+fib(n-2)); } // Stackoverflow error // public static void main(String[] args) { int i, n = 7; for(i=1; i<=n; i++)

您在调试器中单步执行代码,您将看到

public class Fibonacci2 {

static int fib(int n) {
  if(n==1 || n==2) {
    return(1);
  }
  return fib((n-1)+fib(n-2));
}

// Stackoverflow error //
public static void main(String[] args) { 
  int i, n = 7;
  for(i=1; i<=n; i++)
    System.out.println("FIbonaci series" + fib(i));
  }
}
应该是

return fib((n-1)+fib(n-2));
就像你所拥有的一样

return fib(n-1) + fib(n-2);

这会很快产生非常高的递归级别。

fib(n-1)+fib(n-2)替换
fib(n-1)+fib(n-2)
可能会对您有所帮助

return fib(fib(n-2));
    public static void fib(int initial, int current, int n) {
    int sum = 0;
    sum = initial + current;
    if (initial == 0) {
        System.out.print(current + " ");
    }
    System.out.print(sum + " ");
    initial = current;
    current = sum;
    if (n > 2) {
        fib(initial, current, n - 1);
    }
}