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