我应该比较一个递归函数和一个非递归函数,看看哪个函数对类项目更快。教授还希望我们在迭代器等于 10,100,1000 等时以毫秒为单位对迭代进行计时。我完成了所有工作,但在 C++ 中获取计时器时遇到了很多麻烦,所以我改用 Java,因为它太多了更容易获得毫秒输出。
但是现在当我尝试使用任何超过 8,000 的数字时,我会从递归算法中得到一个大的胖堆栈溢出错误。谁能给我任何见解?奖励:我也不知道如何像在非递归函数中那样在递归函数中执行计时器。我将如何处理这个?
public class comparingTimes {
public static void main(String[] args) {
double num = 10000;
double result;
nonRec(num);
result = rec(num);
System.out.printf("Rec %.0f",(result));
}
public static void nonRec(double num)
{
double resultNum = 1;
double total = 0;
long startTime = System.currentTimeMillis();
long endTime;
for (double i = 1; i < num; i++)
{
total += i * (i+1);
if (i == resultNum)
{
endTime = System.currentTimeMillis();
System.out.printf("Total execution time: %f seconds - num = %.0f%n", (endTime - startTime)/1000.0, i);
resultNum *= 10;
}
}
System.out.printf("NonRec: %.0f%n", total);
}
public static double rec(double num)
{
if (num == 0)
return 0;
else
return num * (num-1) + rec(num-1);
}
}