Site hosted by Angelfire.com: Build your free website today!

UNIVERSIDAD PILOTO DE COLOMBIA
SECCIONAL ALTO MAGDALENA
GIRARDOT













INICIO

ALGORITMIA

NOT. ASINTOTICA

PROBLEMAS PN Y P

ESTRUCTURA DE DATOS

RECURSIVIDAD

ARBOLES
 

RECURSIVIDAD

La recursividad es una técnica de programación importante. Se utiliza para realizar una llamada a una función desde la misma función de forma indirecta ó llamarse a si misma de forma directa.

 

Una de las características de la recursividad es que Para que una definición recursiva esté completamente identificada es necesario tener un caso base que no se calcule utilizando casos anteriores y que la división del problema converja a ese caso base.


Un requisito importante para que sea correcto un algoritmo recursivo es que no genere una secuencia infinita de llamadas así mismo.

 

Para resolver un problema, el primer paso será la identificación de un algoritmo recursivo. Tendremos que diseñar: casos base, casos generales y la solución en términos de ellos.



Casos base: Son los casos del problema que se resuelve con un segmento de código sin recursividad.

 

Casos generales: Si el problema es suficientemente complejo, la solución se expresa, de forma recursiva, como la unión de:

 

La solución de uno o más subproblemas (de igual naturaleza pero menor tamaño).

 

Un conjunto de pasos adicionales. Estos pasos junto con las soluciones a los subproblemas componen la solución al problema general que queremos resolver.




PROBLEMA FACTORIAL

int factorial (int n){

  if (n==0)   //Caso base

                          return 1;

              else   //Caso general

                           return n*factorial(n-1);

}

 

// Solución estructurada

 

int factorial (int n){

  int resultado;

              if (n==0)   //Caso base

               resultado = 1;

               else   //Caso general

                           resultado = n*factorial(n-1);

               return resultado;

}




PROBLEMA FIBONACCI

#include <iostream>

 //====================

int fib(int val){

   if ((val==1)||(val==2))

   return 1;

   else

  return (fib(val-1)+fib(val-2));

}

 //====================

int main (int argc, char * const argv[]) {

  int n;

  std::cout<<"Numero entero:";  

           std::cin>>n;

           std::cout<<"\nEl "<< n <<"-esimo numero fibonacci es: "<< fib(n);

           return 0;

 }




VENTAJAS

No es necesario definir la secuencia de pasos exacta para resolver el problema.

 

Los algoritmos recursivos dan elegancia a las soluciones de los problemas.




DESVENTAJAS

Es fácil crear una función recursiva que no llegue a devolver nunca un resultado definitivo y no pueda llegar a un punto de finalización del bucle "infinito".

 

Menor eficiencia.

 

 

 

 

 

 


Jose Said Uricoechea Sandoval   -     Jose Roberto Reyes   -   Elkin Espinosa

Ingenieria de Sistemas  VI Semestre