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

Re: [escepticos] Ackermann



Alfonso A. C. wrote:
> 
> 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.

Pero la pila es al fin y al cabo memoria. Normalmente, la cantidad de
memoria necesaria para hacer dichos procesos sin recursividad es muy
similar y la desventaja es minima.

Tambien esta el tiempo debido a que es una llamada a funcion que debe de
realizar al menos una (o dos, dependiendo de los sistemas) actuaciones
en pila y un cambio de direccion de ejecucion. En muchos casos, el
tiempo perdido y la cqantidad de memoria utilizada en exceso compensan
frente a la claridad y simplicidad otras veces lo que importa es la
velocidad. Ya se sabe que ambas cosas normalmente se oponen.

Por ejemplo. Si tu tienes que hacer una tarea 10 veces y siempre 10
veces es mejor que la copies diez veces seguidas que hacer un bucle, es
mas rapido.

>         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).

Depende. Actualmente los recursos son baratos y la velocidad de los
ordenadores tan alta que tal vez sea mejor la claridad.

 
>         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.

Depende del uso. Evidentemente si va a ser intensivo lo mejor que puedes
hacer es tabularlo, pero basta hacer la funcion interactiva con acceso a
la tabla y a una tabla de marcas.
 
>         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).

Depende. Si esta tardanza no es apreciable desde el punto de vista
humano (minimo el tiempo entre dos pulsaciones de tecla) entonces carece
de sentido lo de la velocidad.
 
>         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.

Por supuesto. Pero en casos como este en los que la productividad no es
importante es mejor la claridad.

Por cierto, me puedes poner la formula de recursividad de nuevo?
Es que la he borrado y queria hacer el programita.



 
>         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?

Dadas estan.
 
>         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

A traves del septimo chancro????


/-----------------------------------\
|  Eloy Anguiano Rey                |
|  Dpto. Ing. Informatica           |
|  U.A.M.                           |
\-----------------------------------/