Está en la página 1de 1

Funcin Ackerman

Tras la implementacin del algoritmo de Ackerman en lenguaje JAVA, de la forma:


Ackerman (int m, int n)
Notamos que para m> 3 y n>1 la ejecucin, como al tratar de almacenar los valores en una
matriz en forma dinmica nos lanza error del tipo ArrayIndexOutOfBoundsException o
simplemente implementando retornando el valor nos lanza un error del tipo
StackOverflowError.
Esto se debe a que la funcin Ackerman tiene un crecimiento demasiado rpido para los
valores mencionados, sobrepasando la cantidad de bits que usa la variable int del compilador
para soportar cantidades enteras (aun usando el tipo long) por tanto, en un algoritmo dinmico
sobrepasara el tamao en el cual la matriz debe almacenar el valor.
Para eso veremos primero los rangos de las variables enteras que ofrece el compilador.

long

64

9,223,372,036,854,775,808 hasta
9 ,223,372,036,854,775,807

int

32

2,147,483,648 hasta 2,147,483,647

short

16

32,768 hasta 32,767

byte

128 to 127

Ahora veremos el crecimiento de la funcin Ackerman detenidamente:


Nmeros de Ackerman (m, n)

m\n

n+1

n+2

11

2n + 3

13

29

61

125

13

65533

2.

65536

A(3,2

-3)

A(3,A(4,3))

(n+3)

Concluyendo, al ver la relacin de los dos cuadros vemos como el crecimiento de la funcin
Ackerman para m>3 y n>1 desbordan el tamao de las variables del compilador.

También podría gustarte