Ver Mensaje Individual
  #2 (permalink)  
Antiguo 12/02/2011, 17:56
cabeto14
 
Fecha de Ingreso: junio-2010
Mensajes: 46
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: explicacion logica recursividad??

hola amigo.. voy a intentar explicarte espero saberlo hacer

una funcion recursiva es aquella que se llama asi misma de forma directa o indirecta (a travez de otra funcion)

metodologia:
* una funcion recursiva sabe unicamente como resolver el caso mas sencillo o caso base.
* si se llama a una funcion con un problema mas complejo, esta divide la tarea en dos piezas conceptuales:

1. la pieza que sabe resolver el caso base o problema mas simple.
2. la pieza que no sabe como resolver el problema..

para que la recursividad se de la pieza 2 debe llamar a un problema (funcion) similar al original pero una vesion mas simple de esta (mas facil de resolver).

* como la pieza 2 representa una version similar al problema original, esta va llamar (cuantas veces sea necesario) a una nueva copia del problema cada vez mas pequeño o simple (la funcion se llama asi misma). a esto se le conoce como paso recursivo

* para que la recursividad acabe, esta serie de problemas cada vez mas pequeños o mas sencillos debe converger en el caso baso. cuando sucede esto la funcion ya sabe como resolver el problema y en este punto se genera una serie de retornos hasta llegar a la funcion original y devuelve el resultado final a la funcion que la llamo (por lo general main()).
Código:
                   llamadas                                                              Retornos
funcion original->  *                                                                       * <- funcion origi
                             |                                                                       ^
                             *                                                                       *
                             |                                                                       ^
                             *                                                                       *
                             |                                                                       ^
caso base ->        *                                                                        * <- caso base
por lo general las funciones recursivas tienen una estructura similar a esto

Código:
void funcionRecursiva (<tipo>valor)
{
   if (evaluacion) // evalua el caso base      ---> pieza 1
   return 1; // (por ejemplo) caso base.
  else //paso recursivo
  return valor*funcionRecursiva (valor-1); // observa que el problema se hace mas sencillo (valor-1)
}
te pongo un ejemplo (elevar un numero a una potencia)
Código:
//Ejercicio de Recursividad.
# include <iostream>

using namespace std;
long int potencia (int,int);
int main ()
{
    int base,exponente;
    cout<<"\n\t programa Potencia";
    cout<<"\n escriba el numero a elevar: \n";
    cin>>base;
    cout<<" elevado a ";
    cin>>exponente;
    cout<<"\n Resultado: "<<potencia(base,exponente);
    return 0;
}

long int potencia (int b, int e)
{
    if (e==1) //pieza 1
    {
        return b; //caso base
    }
    else //pieza 2
    {
        return b*potencia(b,e-1); //paso recursivo
    }
}