[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [escepticos] Ackermann
Miguel Angel Velilla Mula wrote:
>
> Eloy Anguiano wrote:
> >
> > Alfonso A. C. wrote:
> > >
> > > Hola Pedro.
> > >
> > > Pedro Maicas wrote:
> > > >
> > > >
> > > > long Ackerman(long m, long n)
> > > > {
> > > > if(m == 0) return n + 1;
> > > > if(n == 0) return Ackerman(m - 1, 1);
> > > > return Ackerman(m - 1, Ackerman(m, n - 1));
> > > > }
> > > > MANDAMIENTO No 35: Siempre que puedas, usa funciones recursivas.
> > Como ya se ha dicho A(5,5) es un numero bestia y por tanto pocos numeros
> > de este tipo se pueden calcular, por tanto el recursivo es mas claro y
> > no hay demasiada perdida de tiempo.
> Apesar de ser contra el uso de recursividad en la programacion,
> reconozco que esta funcion no tiene como solucionarse sin usar
> recursividad, a no ser en casos especificos que se consiga una formula
> general para algunos tipos (por ej. m=1, m=2 etc).
A hojo e intentado ver cual es el maximo anidamiento en el caso A(4,1) y
es muy escaso porque rapidamente se reducen a valores del tipo A(m,0)
que cierran el anidamiento y no puede superar el orden de las decenas de
llamadas.
Cuatro bytes del CS y el IP y 8 de los parametros de paso (son dos
longs) son solo 12 que por varias decenas es del orden de los centenares
de bytes o a lo sumo de 1kb, pero no de 1Mb...
/-----------------------------------\
| Eloy Anguiano Rey |
| Dpto. Ing. Informatica |
| U.A.M. |
\-----------------------------------/