-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
你必須使用遞歸函數嗎? –
爲什麼要重新計算你已經計算的東西?在確定斐波那契數列中的每個元素時,將它們存儲在一個數組中。因此,不要每次都重新計算它們,只需參考已計算的那些。 – David
你基本上是打印斐波那契系列,還有其他方法可以在很短的時間內完成!在這裏你正在做一些你已經計算好的東西,所以每次的時間幾乎是兩倍,所以它隨着2的冪增加。 –