Ackermannfunktionen

Från testwiki
Hoppa till navigering Hoppa till sök

Ackermannfunktionen är ett exempel på en beräkningsbar funktion som inte är primitivt rekursiv.

Ackermannfunktionen definieras för icke-negativa heltal m och n enligt: A(m,n)={n+1 m=0A(m1,1) m>0,n=0A(m1,A(m,n1)) m>0,n>0.

Från definitionen syns tydligt att för m>3 växer A(m,n) väldigt snabbt, redan för låga värden på n. Exempelvis är A(4,2) skrivet i decimal form ett heltal med över 19 000 siffror.

För specifika värden på n, då m<4 kan A(m,n) beskrivas med relativt enkla medel:

A(m,n)={n+1 m=0n+2 m=12n+3 m=22n+33 m=3

För större värden på m växer funktionen alltför snabbt för att beskrivas med några av de elementära räknesätten. I stället kan Knuths pilnotation användas.

Generellt gäller att

A(m,n)=2m2(n+3)3.

Med hjälp av denna beskrivning kan rekursionen av A(4,2) göras något enklare.

A(4,2)=242(2+3)3=22(5)3=222223=222223=2655363

Och då

log(265536)=65536log(2)19728,3

förstås att detta tal utskrivet i decimal form har 19 729 siffror.

Ackermannstal

Värden på A(m,n)
n
0 1 2 3 4 n
m 0 1 2 3 4 5 n+1
1 2 3 4 5 6 n+2=2+(n+3)3
2 3 5 7 9 11 2n+3=2(n+3)3
3 5 13 29 61 125 2(n+3)3
4 13

=2223
65533

=22223
265536 − 3

=222223
22655363

=2222223
222655363

=22222223
2223n+3
5 65533

=233
243 253 263 273 2(n+3)3
6 233 243 253 263 273 2(n+3)3

Se även

Mall:Mycket stora tal