2017-02-17 42 views
-1
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)请告诉如何处理它。使用递归错误的FIbonacci系列?

回答

4

您通过代码在调试器步骤,你会看到

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

应该

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

,你有什么样

return fib(fib(n-2)); 

从而迅速产生非常高水平的递归。

1

取代fib((n-1)+fib(n-2))fib(n-1)+fib(n-2)