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

标签 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;
    }  
 }

最佳答案

这是必须实现时差的一种方法

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

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

关于Java Fib迭代和Fib递归时间比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25881422/

相关文章:

C# 及时查找所有缺失的段

haskell - 在固定时间内计算尽可能多的列表

java - 在java中如何从图像中提取相机相关信息?

java - 2 Java 中的错误,没有任何线索

AngularJS:通过递归指令手动 $compile 与自然 $compile

java - 如何摆脱递归方法调用的先前迭代?

python - 如何在 Python 中构建这样一个函数式编程工具?

python - 如何根据时间范围连接2个pandas数据框

java - com.android.internal.view.menu.MenuBuilder 无法在 android 中转换为 android.support.v7.view.menu.MenuBuilder

java - MySQL选择从今年到去年特定月份的所有行