Академический Документы
Профессиональный Документы
Культура Документы
Explica:
Qu es una funcin recursiva?
Se dice que una funcin es recursiva cuando algo est definido en trminos de
una versin ms pequea de s mismo .
No todas las funciones pueden llamarse a s mismas, sino que deben estar
diseadas especialmente para que sean recursivas, de otro modo podran
conducir a bucles infinitos, o a que el programa termine inadecuadamente.
Tampoco todos los lenguajes de programacin per miten usar recursividad.
C++ permite la recursividad.
Cada vez que se llama a una funcin, se crea un juego de variables locales, de
este modo, si la funcin hace una llamada a s misma, se guardan sus variables y
parmetros, usando la pila, y la nueva i nstancia de la funcin trabajar con su
propia copia de las variables locales.
Cuando esta segunda instancia de la funcin retorna, recupera las variables y los
parmetros de la pila y contina la ejecucin en el punto en que haba sido
llamada.
La recursividad consume muchos recursos de memoria y tiempo de ejecucin, y se
debe aplicar a funciones que realmente le sean tiles.
Qu es un caso base?
Es el caso para el cual la solucin se puede declarar en forma no recursiva.
Normalmente, corresponde a instancias del problema simples y fciles de
implementar, para los cuales es innecesario expresar la solucin en trminos de
un sub problema de la misma naturaleza, es decir, de forma recursiva.
Es recomendable poner varios casos, para asegurarse que el conjunto es
suficientemente amplio como para asegurar el fin de la recursin.
) es una instancia
menos para calcular
(
) que para calcular N!. Si podemos enco ntrar un caso base, se podr escribir
un algoritmo recursivo.
Para este caso: 0! Est definido en la matemtica como 1.
Factorial (entrada:n)
If n es 0
Devolver 1
ELSE
Devolver n*Factorial(n-1)
{
if (n == 0)
return 1;
//caso base
else
return n*Factorial(n-1); //caso general
Trazando la funcin con un n original de 4.
Llamada 1:
n es 4. Puesto que n no es 0, la bifurcacin else esta ocupada. La
declaracin return no puede ser completada hasta que la llamada recursiva
a Factorial con n-1 como argumento ha sido completada.
Llamada 2:
n es 3. La declaracin return no puede ser completada hasta que la llamada
recursiva a Factorial con n-1 como argumento ha sido completada.
Llamada 3:
n es 2. La declaracin return no puede ser completada hasta que la llamada
recursiva a Factorial con n-1 como argumento ha sido completada.
Llamada 4:
n es 1. La declaracin return no puede ser completada hasta que la llamada
recursiva a Factorial con n-1 como argumento ha sido completada.
Llamada 5:
Solucin iterativa:
int Factorial (/*in */ int n)
{
int factor;
int count;
factor =1;
for (count = 2; count <=n; count++)
factor = factor * count;
return factor;
}
Solucin recursiva
int Factorial ( /* in */ int n)
{
if (n ==0)
return 1;
else
return n* Factorial(n-1);
}
La versin iterativa tiene dos variables locales, mientras que la versin recursiva
no tiene ninguna.