2017-02-17 64 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)