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
}
}