我得到这个“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但问题无法解决,,,,
答案 0 :(得分:2)
您创建了“无尽的”或至少“太深”的递归。 这是问题所在。
不要谈论这个功能已经非常快速地增长的事实。 所以你需要BigInteger(不是int,不长)。可能即使BigInteger也不会让你走得太远。
答案 1 :(得分:2)
堆栈溢出表示嵌套方法调用太多。
你的逻辑似乎是正确的,它肯定会涉及许多递归调用。
无论如何,我认为您应该很高兴看到 ACK(4,4)的结果。
确认(7,10) - 真的吗?要求太多......就像打电话 NQueens(16):P
答案 2 :(得分:0)
您可以尝试操作JVM堆栈大小。我不确定这最终会有什么帮助,但是如果你有一台拥有大量内存的机器,你可以增加堆栈和堆,并进一步推动故障。
默认堆栈大小为384KB。您使用-Xss
参数对JVM进行操作。例如,-Xss512k
将堆栈大小设置为512KB。