Javaで再帰的なアッカーマン関数を書いてみました。しかし、私はどこかで非常に間違っていると思います!誰かが私のコードを修正する正しい方向を見て、確認し、多分私を指し示すことができますか?ありがとう!
私がコードに関して抱えている問題は、私がそれを書いた後、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;
}
}