我試圖用Java編寫遞歸Ackermann函數。但是我認爲我在某個地方出錯了!任何人都可以看看,檢查並指出我的方向是否正確,以糾正我的代碼?謝謝!Ackermann函數和遞歸
我的代碼的問題是,在我寫的,我想,如果有什麼n ==可0和m == 0,有沒有爲這個區域?這會落在if(m == 0)之下還是它需要它自己的if語句?
我的以下解決方案是否正確?如果我以不同的順序給出相同的數字,它會給出不同的結果,我不確定這是否意味着這種情況。
public static int ackermann(int m, int n) {
if (m == 0) {
return n + 1;
} else if ((m > 0) && (n == 0)) {
return ackermann(m-1, n);
} else if ((m > 0) && (n > 0)) {
return ackermann(m-1, ackermann(m,n-1));
} else {
return 0;
}
}
我想到了一些,我想我更加錯了。如果你不知道我做了什麼,我將每個if語句都給出了相反的結果,因爲我認爲如果以不同的方式給出m和n值,以下代碼將起作用。這顯然不能,但有人可以試圖解釋我出錯的地方嗎?
public static int ackermann(int m, int n) {
if (m == 0) {
return n + 1;
} else if (n == 0) {
return m + 1;
} else if ((m > 0) && (n == 0)) {
return ackermann(m-1, n);
} else if ((n > 0) && (m == 0)) {
return ackermann(n-1, m);
} else if ((m > 0) && (n > 0)) {
return ackermann(m-1, ackermann(m,n-1));
} else if ((n > 0) && (m > 0)) {
return ackermann(n-1, ackermann(n, m-1));
} else {
return 0;
}
}
你最後的'else'應該拋出'InvalidArgumentException'。 – SLaks 2012-01-01 16:18:18