Hallo!
Ich soll als Hausübung die Ackermann-Funktion iterativ programmieren. Als Programmiersprache wird JAVA verwendent.
Kann mir da jemand helfen?
Ich komm einfach nicht drauf.
Vielen DAnk
Martin Ranzmaier
Na viel Spaß :)
Die Ackermann Funktion ist wirklich lustig ;)
Die ist ja definiert als:
A(0, n) = n + 1
A(m+1, 0) = A(m, 1)
A(m+1, n+1) = A(m, A(m+1, n))
(Gibt mehrere definitionen, die aber alle gleich sind)
Daraus musst du nun auf eine iterative Lösung kommen.
Man sieht, wenn man A(m+1,0) berechnen will, muss man A(m,1) berechnet haben.
Wenn man A(m+1, n+1) berechnen will muss man A(m+1,n) und A(m,x) berechnet haben, wobei x ziemlich groß sein kann.
Das heißt man hat im Prinzip 2 schleifen:
<pre>
/* Berechnet Ackermann(x,y) */
/* Initialisiere ein Array A[x+1,max_n+1] mit 0 */
for (int m=0;m<=x;m++) {
for (int n=0;n<max_n;n++) {
if (m==0) A[m,n]=n+1;
else if (n==0) A[m,n]=A[m-1,1];
else {
A[m,n]=A[m-1,A[m,n-1]];
}
}
}
</pre>
Einziges Problem ist, das max_n zu kennen. Das kennt man nämlich nicht, sonst wüsste man ja direkt das Ergebniss. Also bleibt einem nix anderes übrig als es hoch genug zu setzen/raten.