FIbonacci系列使用递归错误?

时间:2017-02-17 20:12:15

标签: 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++)
    System.out.println("FIbonaci series" + fib(i));
  }
}

此程序遇到运行时异常(stackoverflow)请告诉如何处理它。

3 个答案:

答案 0 :(得分:5)

您逐步调试调试器中的代码,您将看到

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

应该是

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

就像你拥有的一样

return fib(fib(n-2));

可以快速创建非常高级别的递归。

答案 1 :(得分:2)

fib((n-1)+fib(n-2))替换为fib(n-1)+fib(n-2)

答案 2 :(得分:0)

也许会对您有帮助

    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);
    }
}