java.lang.StackOverflowError的?在java中

时间:2014-01-03 21:37:05

标签: java

我得到这个“java.lang.StackOverflowError” 当我运行代码 但是当我把一个像(7,10)

这样的大数字时,问题就来了

这是我写的代码

计算阿克曼函数的代码

public static void main(String[] args) {
    int m, n, s;
    Scanner maher = new Scanner(System.in);
    System.out.println(" the code for calculate The Ackermann Function ");
    System.out.println(" Enter first number M");
    m = maher.nextInt();
    System.out.println(" Enter Second number N");
    n = maher.nextInt();
    System.out.println("A(" + m + " , " + n + ") = " + Ack(m, n) + " \n");
}
public static int Ack(int m, int n) {
    if (m == 0) {
        return n + 1;
    }
    if (m != 0 && n == 0) {
        return Ack(m - 1, 1);
    }
    if (m != 0 && n != 0) {
        return Ack(m - 1, Ack(m, n - 1));
    }
    return 0;
    // This code written by Maher Al Shammari 212542270 // KFU
}

我尝试将类型更改为long但问题无法解决,,,,

3 个答案:

答案 0 :(得分:2)

您创建了“无尽的”或至少“太深”的递归。 这是问题所在。

不要谈论这个功能已经非常快速地增长的事实。 所以你需要BigInteger(不是int,不长)。可能即使BigInteger也不会让你走得太远。

答案 1 :(得分:2)

  • 堆栈溢出表示嵌套方法调用太多

  • 你的逻辑似乎是正确的,它肯定会涉及许多递归调用。

  • 无论如何,我认为您应该很高兴看到 ACK(4,4)的结果。

  • 确认(7,10) - 真的吗?要求太多......就像打电话 NQueens(16):P

答案 2 :(得分:0)

您可以尝试操作JVM堆栈大小。我不确定这最终会有什么帮助,但是如果你有一台拥有大量内存的机器,你可以增加堆栈和堆,并进一步推动故障。

默认堆栈大小为384KB。您使用-Xss参数对JVM进行操作。例如,-Xss512k将堆栈大小设置为512KB。