ich habe mit den Spaß erlaubt die Ackermann-Funktion zu implementieren. Mit Erstaunen stellte ich fest, dass die Funktion sich sehr bald wegen der Überschreitung der maximalen Rekursionstiefe nicht mehr berechnen lässt.
ackermann(5, 0) geht noch, ackermann(6,0) schon nicht mehr.
ackermann(4,7) ist auch so eine Grenze.
Laut Wikipedia sollte sich mit Java ein ackermann(16,0) berechnen lassen!
Ich habe mir dann die Rekursionstiefe ausgeben lassen, so bei 180000 herum ging es noch.
Ich hab als Vorlage den Pseudocode aus Wikipedia genommen und eins-zu-eins in Python umgesetzt.
Code: Alles auswählen
def ack(n, m):
'''
Implementiert die Ackemann-Funktion
'''
assert n >= 0
assert m >= 0
if n == 0:
return m + 1
elif m == 0:
return ack(n - 1, 1)
else:
return ( ack( n-1, ack(n, m-1) ) )
Grüße,
Hans