2016-09-07 37 views
-1

我這一段代碼:運動 - 原因是程序運行速度慢,以及如何解決它

public class Fibonacci { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 

    final int SIZE; 

    if (args.length == 0) { 
     SIZE = 100; 
    } else { 
     SIZE = Integer.parseInt(args[0]); 
    } 

    Stopwatch stopwatch = new Stopwatch(); 

    for (int n = 1; n <= SIZE; n++) { 
     double timeStart = stopwatch.elapsedTime(); 
     long fiboNumber = fib(n); 
     double timeEnd = stopwatch.elapsedTime(); 
     System.out.print(n + " " + fiboNumber + "\t"); 
     double lapTime = timeEnd - timeStart; 
     System.out.printf(" (%.3f \t %.3f)\n", lapTime, timeEnd); 
    } 
} 

public static long fib(int n) { 
    if (n < 2) { 
     return n; 
    } else { 
     return fib(n - 1) + fib(n - 2); 
    } 
} 
} 

這項計劃的目標是要修改它,程序運行流暢。 現在,當程序運行時,計數器會走慢大約40 我只是想不通爲什麼發生這種情況,所以它運行平穩,以100

+0

你必須使用遞歸函數嗎? –

+4

爲什麼要重新計算你已經計算的東西?在確定斐波那契數列中的每個元素時,將它們存儲在一個數組中。因此,不要每次都重新計算它們,只需參考已計算的那些。 – David

+0

你基本上是打印斐波那契系列,還有其他方法可以在很短的時間內完成!在這裏你正在做一些你已經計算好的東西,所以每次的時間幾乎是兩倍,所以它隨着2的冪增加。 –

回答

0

之所以它要我如何修復它在40左右緩慢的是斐波那契函數花費了大量的時間來計算整數。而不是使用斐波那契的遞歸實現,請使用動態編程實現。

相關問題