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



请检查我的工作,并帮助指导我完成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;
    }  
 }

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

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

除了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));

最新更新