以纳秒为单位查找每个 Fibonacci(n) 的时钟时间
Find the clock time for each Fibonacci(n) in nanoseconds
我试图找出每个 Fibonacci(n) 需要多长时间(以纳秒为单位)。我的代码中的时钟时间对于所有 n 总是相同的。我想我犯了一个错误。我该如何解决?
这是我的一些输出:
0 used 3792 ns
1 used 3792 ns
1 used 3792 ns
2 used 3792 ns
...............
0 used 2455 ns
1 used 2455 ns
1 used 2455 ns
2 used 2455 ns
...............
0 used 2675 ns
1 used 2675 ns
1 used 2675 ns
2 used 2675 ns
class Fibonacci {
private static long startTime = System.nanoTime();
public static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
private static long endTime = System.nanoTime();
public static void main (String args[])
{
long time = (endTime - startTime);
for(int n = 0;n < 25; n++) {
System.out.println(fib(n) + " used " + time + " ns");
}
}
}
在每次迭代中获取调用方法之前的开始时间和之后的结束时间。请注意,这些性能测量并不是最准确的。
for(int n = 0;n < 25; n++) {
long start = System.nanoTime();
System.out.println(fib(n) + " used " + (System.nanoTime() - start) + " ns");
}
为了与 hev1 的回答保持一致,请注意我是如何重新排列您的代码的。请注意现在如何同时声明 startTime 和 endTime。我想你认为通过将它放在你的方法下面,它会在方法之后执行。
没有。它不是那样工作的。执行前后,在下面的 for 循环中进行...不是 因为您在 class 中声明它们的顺序 作为字段。
看看这个:与 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
我试图找出每个 Fibonacci(n) 需要多长时间(以纳秒为单位)。我的代码中的时钟时间对于所有 n 总是相同的。我想我犯了一个错误。我该如何解决?
这是我的一些输出:
0 used 3792 ns
1 used 3792 ns
1 used 3792 ns
2 used 3792 ns
...............
0 used 2455 ns
1 used 2455 ns
1 used 2455 ns
2 used 2455 ns
...............
0 used 2675 ns
1 used 2675 ns
1 used 2675 ns
2 used 2675 ns
class Fibonacci {
private static long startTime = System.nanoTime();
public static int fib(int n)
{
if (n <= 1)
return n;
return fib(n-1) + fib(n-2);
}
private static long endTime = System.nanoTime();
public static void main (String args[])
{
long time = (endTime - startTime);
for(int n = 0;n < 25; n++) {
System.out.println(fib(n) + " used " + time + " ns");
}
}
}
在每次迭代中获取调用方法之前的开始时间和之后的结束时间。请注意,这些性能测量并不是最准确的。
for(int n = 0;n < 25; n++) {
long start = System.nanoTime();
System.out.println(fib(n) + " used " + (System.nanoTime() - start) + " ns");
}
为了与 hev1 的回答保持一致,请注意我是如何重新排列您的代码的。请注意现在如何同时声明 startTime 和 endTime。我想你认为通过将它放在你的方法下面,它会在方法之后执行。
没有。它不是那样工作的。执行前后,在下面的 for 循环中进行...不是 因为您在 class 中声明它们的顺序 作为字段。
看看这个:与 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