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