В соответствии с ответом hev1 обратите внимание, как я изменил ваш код. Обратите внимание, как теперь оба startTime и endTime объявлены вместе. Думаю, вы думали, что, разместив это под своим методом, он будет выполняться после метода.
Нет. Так не работает. Выполнение «до» и «после» выполняется ниже в for l oop ... не из-за порядка, в котором вы объявили их в классе как поля.
Посмотрите на это: с аналогичным исправлением для hev1
class Fibonacci {
private static long startTime;
private static long endTime;
public static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
public static void main (String args[])
{
for(int n = 0;n < 25; n++) {
startTime = System.nanoTime();
int result = Fibonacci.fib(n);
endTime = System.nanoTime();
//System.out.println(result + " used " + (endTime - startTime) + " ns");
System.out.format("%d\t\tused\t%d\tns\n", result, (endTime - startTime));
}
}
}
Вывод:
0 used 5100 ns
1 used 1100 ns
1 used 800 ns
2 used 900 ns
3 used 1300 ns
5 used 1800 ns
8 used 3200 ns
13 used 5400 ns
21 used 9300 ns
34 used 81800 ns
55 used 24700 ns
89 used 3700 ns
144 used 4000 ns
233 used 5900 ns
377 used 10100 ns
610 used 19500 ns
987 used 1281600 ns
1597 used 37900 ns
2584 used 30900 ns
4181 used 46100 ns
6765 used 72900 ns
10946 used 117300 ns
17711 used 189500 ns
28657 used 275400 ns
46368 used 492200 ns