[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]);
    }
  }
}