2016-09-07 23 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左右缓慢的是斐波那契函数花费了大量的时间来计算整数。而不是使用斐波那契的递归实现,请使用动态编程实现。

相关问题