我正在尝试找出哪个功能更快,但是结果有些奇怪:
15-27.89927138384089
时间:54549460
15-27.899271383840894
时间:959352
如果我先交换代码,例如“ logfactorial”的块先出现,那么:
15-27.899271383840894
时间:60053820
15-27.89927138384089
时间:686302
为什么会这样?
import edu.princeton.cs.algs4.StdOut;
public class _20 {
public static void main(String[] args) {
int n = 15;
// place where logfactorial block goes when i swap
long startTime = System.nanoTime();
StdOut.println(n + " - " + Math.log(factorial(n)));
long stopTime = System.nanoTime();
long elapsedTime = stopTime - startTime;
StdOut.println("time: " + elapsedTime);
// logfactorial block begin
long new_startTime = System.nanoTime();
StdOut.println(n + " - " + logfactorial(n));
long new_stopTime = System.nanoTime();
long new_elapsedTime = new_stopTime - new_startTime;
StdOut.println("time: " + new_elapsedTime);
// logfactorial block end
}
private static long factorial(int n) {
if (n == 1) {
return 1;
} else {
return n * factorial(n-1);
}
}
private static double logfactorial(int n) {
if (n == 1) {
return 0;
} else {
return ( Math.log(n) + logfactorial(n-1));
}
}
}