练习 - 原因程序运行缓慢以及如何解决它

时间:2016-09-07 17:19:34

标签: java

我得到了这段代码:

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个。

1 个答案:

答案 0 :(得分:0)

它在40左右变慢的原因是斐波纳契函数花费了大量时间来计算整数。而不是使用fibonacci的递归实现,使用动态编程实现。