程序导致堆栈溢出

时间:2018-10-03 23:41:49

标签: java recursion stack-overflow

我正在尝试使用递归来解决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;
}
}

1 个答案:

答案 0 :(得分:0)

这是高度递归代码的问题;对于每个嵌套调用,java创建另一个“堆栈框架”,其中包含有关局部变量,活动类,当前方法成功时返回到的位置等信息。默认情况下,线程具有大约256K-1MB的堆栈他们可以充满框架;一旦您进行了足够多的遍历,就无法容纳返回堆栈的信息,那么您将获得“堆栈溢出”。

看看您的代码,我想说的是,如果divident/divisor大于10,000-100,000,您将填满堆栈并崩溃。某些问题可以更好地迭代解决!

相关问题