我得到了一个带有真正深度递归的程序,我确定它没有无限循环。但是在很短的时间(1s)后我得到了
java.lang.StackOverflowError
是否有可能增加他试图结束程序的时间?如果可能的话,我想跑几个小时; - )
答案 0 :(得分:3)
听起来你有一个错误。您可以使用-Xss
增加堆大小,但听起来您希望将其增加到远大于计算机的大小。
我建议你减少你正在使用的递归量,所以如果可能的话,它只下降几十个级别。
答案 1 :(得分:0)
如this discussion中所述,您可以执行以下操作:
java -Xss
和java -Xoss
选项)此外,您可以在JDK版本的Java.exe上尝试-server选项,因为它处理的方式有点不同。
但是,听起来你可能会问得太多,需要为你正在做的事情找到一种不同的方法。
答案 2 :(得分:0)
进一步关于减少递归/改变为迭代模式的评论,并且示例可能是有用的。如果我们以阶乘函数为例,它可以递归地(通常是)写成:
int recurse(int n){
if(n = 0) return 1;
else return n*recurse(n-1);
}
然而,它可以迭代完成(因此避免产生大n的堆栈溢出),像这样
int iterate(int n){
int ans = 1;
for(int i = n; i > 0; i--){
ans *= i;
}
return ans;
}
可能值得做一些类似于你的代码的事情,以避免递归(这可能是你的错误的原因),因为它(几乎?)总是可以进行递归迭代