Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 27. Mär 2003, 11:57
Hier erst einmal die Definition der Ackermannschen Funktion.
Code:
m = 0         ==>  A(0, n) = n+1 
m > 0, n = 0  ==>  A(m, 0) = A(m-1, 1)
m > 0, n > 0  ==>  A(m, n) = A(m-1, A(m, n-1))
Dass heisst, dass die Ausgangswerte m und n immer größer oder gleich Null (m=>0; n=>0) sein müssen. Aufgrund dieser Festlegung können diese auch nicht kleiner Null werden.

Wenn m null erreicht liefert die Funktion den Nachfolger von n zurück.
Ansonsten:
Wenn n null erreicht liefert die Funktion den Nachfolger von A(m-1, 1) zurück.
Ansonsten:
Ist das Ergebnis A(m-1, A(m, n-1))

Darin lag auch der Fehler in der Lösung von Phoenix. Du überprüfst zuerst, ob n (y) Null erreicht hat!, aber Du musst zuerst m (x) überprüfen. Dann können die Zahlen auch nie negativ werden.

Es stimmt allerdings, dass diese Funktion schnell die Grenzen des Stacks erreichen kann - (mehr oder weniger) deshalb wurde diese auch entwickelt.

......

P.S. Hier noch ein Link: http://www.kosara.net/thoughts/ackermann.html
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat