jueves, 15 de septiembre de 2011

Factorial recursivo en C

Una función recursiva es aquella que simula un ciclo o iteraciones llamándose así misma, un ejemplo clásico es el programa para obtener el factorial mediante una función. Aquí el ejemplo en lenguaje C

#include <stdio.h>
 
long factorial( long numero ); 



int main()
{
   int i; 
  
   for ( i = 0; i <= 10; i++ ) {
      printf( "%2d! = %ldn", i, factorial( i ) );
   }    return 0;  
} 

long factorial( long numero )
{
   /* caso base */
   if ( numero <= 1 ) {
      return 1;
   } 
   else { /* paso recursivo */
      return ( numero * factorial( numero - 1 ) );
   }  
} 


Vamos a hacer una ejecución 

Suponiendo que se manda a llamar factorial(3). En ese momento hace el siguiente proceso.
long factorial( long numero )
{
//numero vale 3if ( 5 <= 1 ) { //falso
return 1;
}
else { //manda un 2 a la función factorialreturn ( numero * factorial( 3- 1 ) );
}
}

Dentro de la segunda llamada se repite el proceso, ahora con 2
long factorial( long numero )
{
//numero vale 2if ( 2 <= 1 ) {  //falseoreturn 1;
}
else { //manda un 1 a la función factorialreturn ( numero * factorial( 2- 1 ) );
}
}
Ahora que se llama factorial(1), está listo para completar el algoritmo.
long factorial( long numero )
{
/numero vale 1if ( 2 <= 1 ) { //verdadero
return 1;
}
else { //no se ejecutareturn ( numero * factorial( 2- 1 ) );
}
}

Al terminar se hace un recorrido hacia atrás de tal forma que que se ejecuta lo siguiente

En la llamada 3
Se retorna el número 1 directamente

En la llamada 2
numero * factorial( 2- 1 ) );
El valor 1 obtenido en la llamada 3 ahora se utiliza y tenemos.
numero*1 = 2*1=2


En la llamada 1
numero * factorial( 3-1 ) );

El valor 2 que se obtuvo como resultado ahora es invocado en la primera llamada
numero*2=3*2=6


El resultado es 6.

0 comentarios:

Publicar un comentario

Twitter Delicious Facebook Digg Stumbleupon Favorites More