我得到了这段代码:
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 :(得分:0)
它在40左右变慢的原因是斐波纳契函数花费了大量时间来计算整数。而不是使用fibonacci的递归实现,使用动态编程实现。