java.lang.StackOverflower错误?在爪哇
我得到这个“java.lang.StackOverflower错误” 当我运行代码时 但是当我输入一个像(7,10)这样的大数字时,问题就来了 这是我写的代码 用于计算Ackermann函数的代码java.lang.StackOverflower错误?在爪哇,java,Java,我得到这个“java.lang.StackOverflower错误” 当我运行代码时 但是当我输入一个像(7,10)这样的大数字时,问题就来了 这是我写的代码 用于计算Ackermann函数的代码 public static void main(String[] args) { int m, n, s; Scanner maher = new Scanner(System.in); System.out.println(" the code for calculate T
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,但问题没有解决,,,,您创建了“无止境”或至少“太深”的递归。
这就是问题所在
更不用说这个函数增长非常快这一事实了。
因此,您需要biginger(不是int,不是long)。可能即使是BigInteger也不会让您走得太远。您可以尝试操纵JVM堆栈大小。我不确定这最终是否会有帮助,但是如果你有一台拥有大量内存的机器,你可以增加堆栈和堆,进一步排除故障 默认堆栈大小为384KB。您可以使用
-Xss
参数对JVM进行操作。例如,-Xss512k
将堆栈大小设置为512KB。- 堆栈溢出表示嵌套方法调用过多
- 您的逻辑似乎是正确的,这肯定是由于涉及了许多递归调用
- 无论如何,我认为您应该很高兴看到ACK(4,4)的结果
- 确认(7,10)-真的吗?要求太多。。。这就像叫恩奎恩斯(16):P