我正在尝试使用递归来解决this problem,但是我似乎遇到了栈溢出错误,超出了不是> = Integer.MAX_VALUE的特定划分。谁能提供对此问题的一些见识?
class Solution {
int count = 0;
public int divide(int dividend, int divisor) {
int temp1 = Math.abs(dividend);
int temp2 = Math.abs(divisor);
if(dividend > Integer.MAX_VALUE || dividend < Integer.MIN_VALUE){
if ((dividend > 0 && divisor > 0) || (dividend < 0 && divisor < 0)){
System.out.println("executed");
return Integer.MAX_VALUE;
}else{
return Integer.MIN_VALUE;
}
}
divideHelper(temp1, temp2);
if (dividend < 0 && divisor < 0){
return count-1;
}
if (dividend < 0 || divisor < 0){
return -(count - 1);
}
return count-1;
}
public int divideHelper (int dividend1, int divisor1){
if (dividend1 < 0) {
return dividend1;
}
if (dividend1 >= 0) {
dividend1 -= divisor1;
count++;
}
divideHelper(dividend1, divisor1);
return count;
}
}
答案 0 :(得分:0)
这是高度递归代码的问题;对于每个嵌套调用,java创建另一个“堆栈框架”,其中包含有关局部变量,活动类,当前方法成功时返回到的位置等信息。默认情况下,线程具有大约256K-1MB的堆栈他们可以充满框架;一旦您进行了足够多的遍历,就无法容纳返回堆栈的信息,那么您将获得“堆栈溢出”。
看看您的代码,我想说的是,如果divident/divisor
大于10,000-100,000,您将填满堆栈并崩溃。某些问题可以更好地迭代解决!