[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [escepticos] Ackermann
Hola Mig.
Miguel Angel Velilla Mula wrote:
>
> La funcion recursiva de Ackerman es asi:
>
> | n+1 , para m = 0
> A(m,n) = | A(m-1,1) , para n = 0
> | A(m-1,A(m,n-1)) , para los otros casos
>
> Por ejemplo:
>
> A(0,0) = 1
> A(1,0) = 2
> A(2,0) = 3
> A(1,1) = A(0,A(1,0)) = A(0,2) = 3
>
> etc etc....
>
> Estuve tratando de calcular manualmente A(10,10) pero me dio suenho.
> Alguien en la lista que sea bueno en C puede hacer un programita
> recursivo y me pasa el resultado manhana?
>
> Gracias
>
> Mig
No soy bueno, simplemente "lo hablo un poco" ;-)
Te envio el codigo en C adjunto en este mensaje (bueno, c++, diferencia
minima pues simplemente es por gusto, el definir los contadores dentro de los
bucles).
Para compilarlo, en unix-linux :
gcc -o Ackermann Ackermann.cc
No he volcado los resultados en fichero ni nada de eso, asi que para ver los
resultados pon:
Ackermann >Ackermann.txt
Espero te sea util (hay mas modos de hacerlo, entre ellos con parametros de
entrada para pedirle solo un valor, convertirlo en funcion y demas, pero creo
que con esto tienes lo que pediste con el menor costo posible) :-)
Un saludo.
P.D.
Compila tb. en DOS y WINDOWS y demas basuras operativas, pero como yo voy en
Linux, pues eso te indico.
Si hay algun problema, avisad caballero.
--
Alfonso A.C. (Fonso en el irc)
email: aafonso en mx3.redestb.es
www: http://personal.redestb.es/aafonso
#include <stdio.h>
void main()
{
long int resultados[100][100];
for (int m=0;m<100;m++)
{
for (int n=0;n<100;n++)
{
if (m==0) resultados[m][n]=n+1;
else if (n==0) resultados[m][n]=resultados[m-1][1];
else resultados[m][n]=resultados[m-1][resultados[m][n-1]];
printf("M=%d, N=%d , Resultado:%d\n",m,n,resultados[m][n]);
}
}
}