[英]java.lang.StackOverflowError? in 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,但是問題無法解決,,,,,
您創建了“無盡”或至少“太深”的遞歸。 這就是這里的問題。
更不用說這個功能眾所周知非常非常快地增長的事實。 因此,您將需要BigInteger(不是int,不會很長)。 即使BigInteger也不會讓您走得太遠。
堆棧溢出意味着太多的嵌套方法調用 。
您的邏輯似乎正確,這肯定是由於涉及到許多遞歸調用。
無論如何,我認為您應該很高興看到ACK(4,4)的結果 。
ACK(7,10) -真的嗎? 問得太多...就像打電話給NQueens(16) :P
您可以嘗試操縱JVM堆棧大小。 我不確定這是否最終會有所幫助,但是如果您有一台具有大量內存的計算機,則可以增加堆棧和堆,並將故障進一步排除。
默認堆棧大小為384KB。 您可以使用JVM的-Xss
參數對其進行操作。 例如, -Xss512k
將堆棧大小設置為512KB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.