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