我有一个真正深度递归的程序,我确信它没有无限循环。但是在很短的时间(1s)之后我得到了
java.lang.StackOverflowError
是否有可能增加他尝试结束程序的时间?如果可能的话,我想运行几个小时;-)
我有一个真正深度递归的程序,我确信它没有无限循环。但是在很短的时间(1s)之后我得到了
java.lang.StackOverflowError
是否有可能增加他尝试结束程序的时间?如果可能的话,我想运行几个小时;-)
听起来你有一个错误。您可以增加堆大小,-Xss
但听起来您希望将其增加得比机器的大小大得多。
我建议你减少你正在使用的递归量,所以如果可能的话它只会下降几十个级别。
为了进一步关于减少递归/更改为迭代模式的评论,示例可能很有用。如果我们以阶乘函数为例,它可以递归地(并且经常是)写成这样:
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;
}
可能值得做一些类似于您的代码的事情以避免递归(这可能是您的错误的原因),因为它(几乎?)总是可以使递归迭代