我是Java编程的新手,我在计算函数运行所需的时间时遇到了一个问题。
首先了解一些背景知识-我在Python方面拥有丰富的经验,如果您熟悉Jupyter Notebook / Lab %%timeit
函数的功能,我会尝试重新创建它。这是运行中的照片(抱歉,尚无法嵌入足够的业力):
它的作用是运行单元格的内容(在这种情况下为递归函数)1k,10k或100k次,并提供函数的平均运行时间和标准差。
我的第一个实现(使用相同的递归函数)使用了System.nanoTime()
:
public static void main(String[] args) {
long t1, t2, diff;
long[] times = new long[1000];
int t;
for (int i=0; i< 1000; i++) {
t1 = System.nanoTime();
t = triangle(20);
t2 = System.nanoTime();
diff = t2-t1;
System.out.println(diff);
times[i] = diff;
}
long total = 0;
for (int j=0; j<times.length; j++) {
total += times[j];
}
System.out.println("Mean = " + total/1000.0);
}
但是平均值却被大打折扣了-由于某种原因,该函数的第一次迭代(多次运行)需要一百万纳秒的时间:
Pic of initial terminal output
在前十个左右之后的每次迭代都需要395纳米或0纳米-因此那里也可能存在问题...不确定发生了什么!
也-我正在计时的递归函数的代码:
static int triangle(int n) {
if (n == 1) {
return n;
} else {
return n + triangle(n -1);
}
}
最初,我在函数的第一行有n = Math.abs(n)
行,但是后来我删除了它,因为……嗯。我是唯一使用此工具的人。
我尝试了this SO post中提出的许多不同建议,但是它们各自都有自己的问题...如果您需要,我可以讨论一下。
无论如何,在此先感谢您的帮助和专业知识!