przy następnych wywołaniach zamiast wykonywać całość obliczeń z nią związanych odczytuje się wcześniej obliczony wynik bezpośrednio z tablicy w jednym kroku. Przykład w języku Python:

Ack_tab = {} def Ack(m, n): if (m, n) in Ack_tab: return Ack_tab[(m, n)] else: if m==0: r = n + 1 if m>0 and n==0: r = Ack(m-1, 1) if m>0 and n>0: r = Ack(m-1, Ack(m, n-1)) Ack_tab[(m, n)] = r return r albo: def ack(m, n, cache={}): if (m, n) in cache: return cache[(m, n)] elif m==0: cache[(m, n)] = n + 1 elif m>0 and n==0: cache[(m,n)] = ack(m-1, 1, cache) elif m>0 and n>0: cache[(m, n)] = ack(m-1, ack(m, n-1, cache), cache) return cache[(m,n)]

W porównaniu do poprzedniego przykładu (14 wywołań), ta wersja wykona 10 wywołań rekurencyjnych, przy czym jedno z nich – A(1,1) zostanie spamiętane i wykorzystane w 11 wywołaniu funkcji do bezpośredniego zwrócenia wyniku. Przy większych n oraz m zysk jest również większy, dla przykładu A(3,3) wymaga 2432 wywołań, a wersja ze spamiętywaniem 186 wywołań, zapamiętując w tablicy 154 różne pary (m, n) wraz z odpowiadającymi im wartościami.