我的代码有点问题。我试图找到运行时与我为这个问题准备的一些数学进行比较。我特别有一种方法,我正在测试它是这样的:
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;
}
}
我通过以下方式在我的主要方法中测试此代码:
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
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
calls foo(5 / 1, 1), i.e. foo(5, 1)
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句