You are on page 1of 2

Funcin de Ackermann

La funcin de Ackermann es famosa por su importante papel en la teora de computabilidad


como el primer ejemplo de una funcin totalmente computable que no es primariamente
recursiva.
Desde entonces la funcin se ha modificado ligeramente pero an se usa cotidianamente.
Esto es debido a su definicin en terminos de una recursin extremadamente profunda; por
esta razn se usa como una prueba (bencmark) de la capacidad de un compilador o
intrprete para optimizar la recursin.
El objetivo de esta prctica es codificar la funcin de Ackermann expresada con dos
parmetros m y n que retorma un valor entero segn la siguiente definicin:
ack(m,n) = n+1
si m=0
ack(m,n) = ack(m-1,1)
si m>0 , n=0
ack(m,n) = ack(m-1, ack(m,n-1))
si m,n > 0
m, n deben ser enteros no negativos; por esta razn podemos usar a m y/o n como
parmetros que permiten terminar la ejecucin del programa de prueba.
Sugerencia:
Ver funcin de Ackerman.
https://es.wikipedia.org/wiki/Funci%C3%B3n_de_Ackermann
Pruebas:
ack(1, 1) = 3
ack(1, 4) = 6
ack(3, 4) = 125
Cree el archivo entrada.txt como se ve en la Figura 1.
Cree el archivo salida1.txt como se ve en la Figura 1.
- Compile su programa:
$ cc -o RUN ackermann.c
- Ejecute su programa:
$ ./RUN > entrada.txt > prueba.txt
- Pruebe la salida de su programa:
$ diff salida1.txt prueba.txt
no debe dar ninguna salida indicando que los archivos prueba.txt y salida1.txt son
idnticos.
Actividad posterior:
Modifique su programa original para crear una versin que cuente el nmero de veces que se
invoca a la funcin ack. Esta nueva versin NO debe usar variables globales.
Para probar la nueva versin cree el archivo salida2.txt
Nota: formatear su archivo fuente usando el siguiente comando:
$ astyle style==allman ackermann.c

Figura 1

You might also like