Java Fib迭代和Fib递归时间比较

时间:2014-09-17 02:41:22

标签: java recursion time

请您检查我的工作并帮助指导我完成System.currentTimeMillis()函数。我知道它需要我的计算机时间的快照,然后当我结束它需要另一个快照,我使用这些时间的差异来获得我的运行时间。只是不确定我是否正确实现它作为我的迭代函数的时间,我的递归几乎总是相同或最多1关。如果我的迭代开始之前是否再次调用我的开始时间,或者我的时间检查迭代时间是迭代加上我的递归函数,我会感到困惑。我的总迭代时间应该是endTimeIter - endTimeRecur吗?任何帮助表示赞赏。

public class FibTest{
    public static void main (String[] args){
        long startTime = System.currentTimeMillis();
        int n = 40;
        System.out.println("The 40th Fibonacci number per my recursive function is: " +    fibRecur(n));
           long endTimeRecur = System.currentTimeMillis();
           long totalTimeRecur = endTimeRecur - startTime;
        System.out.println("The 40th Fibonacci number per my recursive function is: " + fibIter(n));
           long endTimeIter = System.currentTimeMillis();
           long totalTimeIter = endTimeIter - startTime;
        System.out.println("The time it took to find Fib(40) with my recursive method was: " + totalTimeRecur);
        System.out.println("The time it took to find Fib(40) with my iterative method was: " + totalTimeIter);
    }
    public static int fibRecur(int n){
        if (n < 3) return 1;
        return fibRecur(n-2) + fibRecur(n-1);
    }
    public static int fibIter(int n){
        int fib1 = 1;
        int fib2 = 1;
        int i, result = 0;
        for (i = 2; i < n; i++ ){
            result = fib1 + fib2;
            fib1 = fib2;
            fib2 = result;
        }
        return result;
    }  
 }

2 个答案:

答案 0 :(得分:1)

这是必须如何完成时差的一种方式

long time = System.currentTimeMillis();
methodA();
System.out.println(System.currentTimeMillis() - time);

time = System.currentTimeMillis();
methodB();
System.out.println(System.currentTimeMillis() - time);

答案 1 :(得分:1)

除了Amir的回答:

您的程序中的一个错误是您打印

System.out.println("The 40th Fibonacci number per my recursive function is: " + fibIter(n));

我想你想说的是:

System.out.println("The 40th Fibonacci number per my iterative function is: " + fibIter(n));