[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [escepticos] Ackermann



Hola Eloy.

Eloy Anguiano wrote:

> Alfonso, que eres informatico.

	Bueno, en ello estoy :-)
 
> A ver deberes. Si la funcion es recursiva hagase el codigo recursivo.
> Queda muuuucho mas potito.

	Pues mira, aprovecho este comentario tuyo para opinar y esperar
opiniones de la ilustre corrala (y vuestros, obviamente).

	Cierto es que la recursividad es un arma potente en la informatica (vaaaale,
de las matematicas tb) ;-), pero es un arma de
doble filo.

	Me explico. 

	Cada llamada recursiva precisa de un cambio de contexto en el
programa, es decir, que se ha de guardar el estado en que esta la funcion
recursiva (indicador de programa, registros (para los profanos, donde se
guardan los datos) y direccion de retorno) y llamar a la funcion con los
nuevos valores, creciendo la pila de forma increible.

	Esto, amen de redundar en la velocidad, repercute en los recursos que consume
el programa.

	En este ejemplo, esta funcion puede ser implementada simplemente como un
algoritmo voraz, el cual por definicion (creo recordar) se caracteriza por no
calcular dos veces nunca el mismo dato.

	Desde mi punto de vista (erroneo o cierto, no lo se seguro), es
mejor implementarla iterativamente que recursivamente, guardando los valores
generados en una tabla para su posterior consulta (lo ejecutas
una vez y ta luego).

	Ejemplo: Si quisieras calcular el valor de Ackerman de 10,10 y luego de 9,9
el resultado del segundo lo tendrias en el primero (ya calculado) haciendolo
iterativo (una vez) y leyendo luego los resultados, mientras que
recursivamente ejecutarias todas las operaciones nuevamente. Aumentando el
numero de llamadas a la funcion
nos darian resultados cada vez mas claros, viendo cual de los dos metodos
resulta optimo.

	Esto, obviamente, en base solo a los resultados obtenidos. 

	Igualmente se puede estudiar si el cambio de contexto en la ejecucion del
programa al hacerlo recursivo va a ser mas rapido que la iteracion (es decir,
si las operaciones de iteracion consumen x ciclos y el cambio de contexto
recursivo consume 2x, amen de mas memoria, claramente nos decantariamos por el
que menos tarda).

	Resumiendo (que tengo algo de prisilla), la recursividad, EMHO, no ha de ser
implementada siempre, sino que han de contemplarse las 
necesidades, posibilidades, recursos, tiempos y forma de uso de la funcion.

	Si puedo luego mando la funcion recursiva con tiempos y comparaciones (luego
o mañana, depende de como salgan los estudios) :-(
para asi comprobar y ejemplificar este rollo que acabo de soltar.

	¿Opiniones?

	Un saludo.

	P.D.

	Abstenerse iluminados, gregorizados, malamutizados y demas ejemplares, que
estoy hablando de informatica, no de si
mañana toca elevar el alma formando un lo que sea o pasar el karma del nivel 2
al 4 (pista 0 sector 5) X-DDD

-- 
Alfonso A.C. (Fonso en el irc)
email: aafonso en mx3.redestb.es
www: http://personal.redestb.es/aafonso