Az informatika elméletében az Ackermann-függvény az egyik leggyakrabban használt példa egy olyan kiszámítható komplex függvényre, amely nem primitív rekurzív. Ez azt jelenti, hogy hihetetlenül gyorsan növekszik, és a veremtár (call stack) túlcsordulását vagy memória- és időtúllépést okozhat már viszonylag kis bemeneti értékeknél is (pl. A(4, 2)).
-----------------------------
def ackermann(m, n):
if m == 0:
return n + 1
elif m > 0 and n == 0:
return ackermann(m - 1, 1)
elif m > 0 and n > 0:
return ackermann(m - 1, ackermann(m, n - 1))
# Vigyázat! Az m=4 és n=2 értékeknél a rekurzió mélysége miatt
# a program memóriahiány miatt összeomolhat.
eredmeny = ackermann(3, 4)
print(f"Az Ackermann(3, 4) értéke: {eredmeny}")
----------------
Output:
Az Ackermann(3, 4) értéke: 125
---------------
def ackermann(m, n):
if m == 0:
return n + 1
elif m > 0 and n == 0:
return ackermann(m - 1, 1)
elif m > 0 and n > 0:
return ackermann(m - 1, ackermann(m, n - 1))
# Példa hívás
print(ackermann(3, 4)) # Eredmény: 125
----------
https://onecompiler.com/python#draft-zge8
Nincsenek megjegyzések:
Megjegyzés küldése