J'ai essayé d'écrire la fonction récursive Ackermann en Java. Mais je pense que je suis allé très très mal quelque part! Quelqu'un pourrait-il jeter un coup d'oeil, vérifier et peut-être pointer mon dans la bonne direction de corriger mon code? Merci!La fonction Ackermann et la récursion
La question que j'ai avec le code est que, après je l'ai écrit, je pensais que, si n == 0 et m == 0, il n'y a pas un espace pour cela? Est-ce que cela tomberait sous le if (m == 0) ou aurait-il besoin de sa propre if-statement?
Ma solution suivante est-elle correcte? Si je lui donne les mêmes nombres dans une séquence différente, cela donne un résultat différent et je ne suis pas sûr que cela soit le cas. J'y ai réfléchi encore un peu et je pense que je me suis encore plus trompé. Si vous ne pouvez pas comprendre ce que j'ai fait, j'ai donné à chaque instruction if un sens opposé, parce que je pensais que si les valeurs m et n sont données différemment, le code suivant fonctionnera. Ce n'est clairement pas le cas, mais quelqu'un pourrait-il essayer d'expliquer où je me suis trompé?
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;
}
}
Votre 'else' final devrait lancer un' InvalidArgumentException'. – SLaks