【发布时间】:2018-09-15 20:17:55
【问题描述】:
我的代码有点问题。我试图找到运行时来与我为这个问题准备的一些数学进行比较。我有一个特别是我正在测试的方法是这样的:
public static int foo(int n, int k){
long startTime = System.nanoTime();
if(n<=k){
long endTime = System.nanoTime();
System.out.println("checkFoo");
System.out.println("start time: " +startTime);
System.out.println("end time: " +endTime);
return 1;
}
else{
return foo(n/k,k) + 1;
}
}
我通过以下方式在我的 main 方法中测试此代码:
public static void main(String[] args){
foo(1, 1);
foo(5, 1);
foo(10, 1);
foo(100, 1);
}
我收到一个错误提示
Exception in thread "main" java.lang.StackOverflowError
然后它重复该行:
at Problem3.foo(Problem3.java:42)
我想知道这是否与 foo 应该返回一个 int 的事实有关,也许我只是没有正确调用该函数。如果是这种情况,调用此函数的正确方法是什么,以便它也打印出我需要的信息?还是这个错误与我理解的完全不同?
【问题讨论】:
-
对于
foo(5,1),你有n=5,k=1,所以n<=k是假的,foo(n/k,k)表示foo(5/1,1)又名foo(5,1),所以用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后用相同的参数调用自己,然后堆栈溢出 -
@Andreas 感谢您了解这一点。我正在以完全不同的方式阅读代码。
标签: java exception runtime static-methods