Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Realizado por:
Oscar Aguilar
Recursividad
Recursividad
La recursividad (recursión) es aquella propiedad
que posee una función por la cual dicha función
puede llamarse a sí misma.
Se puede utilizar la recursividad como una
alternativa a la iteración.
Recursividad
Recursividad
Una solución recursiva es normalmente menos
eficiente en términos de tiempo de computadora
que una solución iterativa;
sinembargo, en muchas circunstancias el uso de la
recursión permite a los programadores especificar
soluciones naturales, sencillas, que serían, en caso
contrario, difíciles de resolver.
Poresta causa, la recursión es una herramienta
poderosa e importante en la resolución de
problemas y en la programación
Subprograma recursivo
Subprograma recursivo
Un subprograma recursivo es un subprograma que
se llama a sí mismo ya sea directa o
indirectamente.
Una función recursiva es una función que se llama a sí
misma, ya sea directa o indirectamente
n = 0
Ejem: Función Recursiva de la
Función Factorial
Ejemplo: función factorial recursivo para números
enteros positivos
if( n == 0 )
fact = 1;
else
fact = n*factorial(n-1);
return(fact);
}
Ejem: Algoritmo Recursivo de la
Función Factorial
Recursive Case 1!
1*1=1
Caso Base 1! = 1 * 0!
1
Ejemplos de Funciones Recursivas
Función SUMATORIA
Ejm: Función Sumatorio
if( n == 0 ){
return 0 ;
}
else {
return ( n + sumatorio ( n-1) );
}
}
Ejem: Algoritmo Recursivo de la
Función Sumatorio
suma(1) = 1 + suma(0)
suma(0) = 0
Algoritmo Recursivo y
Algoritmo Iterativo
Algoritmo recursivo
Ejemplo: Algoritmo de función factorial recursivo
para números enteros positivos
n = 0
Algoritmo Iterativo
Ejemplo: Algoritmo de función factorial Iterativo
para números enteros positivos
Utilidad de la Recursividad
Utilidad de la Recursividad
Ventajas
Permite soluciones simples de problemas complejos.
Da lugar a algoritmos simples.
Inconvenientes
Losalgoritmos recursivos suelen ser difíciles de
entender.
Sonmás costosos en tiempo y espacio que sus
versiones iterativas
Estructura de un algoritmo Recursivo
Estructura de un algoritmo Recursivo
if(n==0)
Caso Base
fact = 1;
else
fact = n*factorial(n-1); Paso de
return(fact); Recursión
}
Estructura de un algoritmo Recursivo
if( n == 0 ){
Caso Base
return 0 ;
}
else {
return ( n + sumatorio ( n-1) ); Paso de
} Recursión
}
Componente base
Un requisito para que un algoritmo recursivo sea
correcto es que no genere una secuencia infinita
de llamadas sobre sí mismo.
Cualquier algoritmo que genere una secuencia de este
tipo no puede terminar nunca.
En consecuencia, la definición recursiva debe
incluir un componente base (condición de salida)
En el que función f(n) se defina directamente (es decir,
no recursivamente) para uno o más valores de n.
Componente base
Ejemplo-1: Condición base en la función factorial
La condición de salida o base es f(n) = 1 para n = 0
La Ecuación recursiva de la función Factorial es:
n = 0
n > 0
Componente base
Ejemplo-1: función factorial para números enteros
positivos
n = 0
Componente base
Ejemplo-2: Condición base en la función
Sumatorio
La condición de salida o base es t(n) = 0 para n = 0
La Ecuación recursiva de la función Sumatorio es:
Componente base
Ejemplo-2: función Sumatorio recursivo para
números enteros positivos
if( n == 0 ){
return 0 ;
}
else {
return ( n + sumatorio ( n-1) );
}
}
Implementación Recursiva
Implementación Recursiva
La implantación de una solución recursiva para
un problema implica definir:
Componente recursivo
Componente base
Implementación Recursiva
Componente recursivo: Intentar plantear la
solución del problema en función de la solución
de un subproblema del mismo tipo.
Ejemplos:
Implementación Recursiva
Componente Base: Encontrar uno o varios casos
en los que la solución sea trivial: casos base
condición/es de parada
Ejemplos:
Tipos de recursión
Tipos de recursión
Recursión directa
Es cuando una función, procedimiento o método se
invoca a sí misma
El código del subprograma recursivo F contiene una sentencia
que invoca a F
Recursión indirecta
Es cuando una función, procedimiento o método puede
invocar a una segunda función, procedimiento o método
que a su vez invoca a la primera
El subprograma F invoca al subprograma G que invoca a su
vez al subprograma P, y así sucesivamente hasta que se
invoca de nuevo al subprograma F.
Tipos de recursión
Recursión
Directa
Recursión //-----------------------------------------------------
Indirecta
Tipos de recursión
Ejemplo: Recursión directa
Función sumatoria de los N primeros números naturales
if( n == 0 ){
return 0 ;
}
else {
return ( n + sumatorio ( n-1) );
}
}
Tipos de recursión
Ejemplo: Recursión Indirecta
Función sumatoria de los N primeros números naturales
//---------------------------------
int sumatorio2 ( int n ) {
return ( n + sumatorio1(n-1) ) ;
}
Ejemplos de Funciones Recursivas
Ejemplo-1: Función Factorial
Ejemplo-1: Función Factorial
La Ecuación recursiva de la función Factorial f(n) es:
Luego obtenemos:
Asi:
Ejemplo-1: Función Factorial
De modo que la definición recursiva del factorial es:
n = 0
Ejemplo-1: Función Factorial
Ejemplo: función factorial recursivo para números
enteros positivos
int factorial(int n) //definición de la función
{
int fact;
if(n==0)
fact = 1;
else
fact = n*factorial(n-1);
return(fact);
}
Ejemplo-1: Función Factorial
Ejemplo: función factorial recursivo para números enteros
positivos con validación
int factorial(int n) //definición de la función
{
int fact;
if(n>=0) {
if(n==0)
fact=1;
else
fact = n* factorial(n-1);
}
else{
System.out.println("Error: numero negativo");
fact = -1;
}
return(fact);
}
Ejemplo-2: Función Sumatorio
Ejemplo-2: Función Sumatorio
La Ecuación recursiva de la función Sumatorio es:
0 0
n 0
if( n == 0 ){
return 0 ;
}
else {
return ( n + sumatorio ( n-1) );
}
}
Ejemplo-2: Función Sumatorio
Ejemplo-2: función Sumatorio recursivo para números
enteros positivos con validación
if( n == 0 ){
return 0 ;
}
else {
return ( n + sumatorio ( n-1) );
}
}
Ejemplo-3: Función Multiplicación
Ejemplo-3: Función Multiplicación
La definición recursiva de la multiplicación de dos números a y
b, se deriva de la definición como suma abreviada y la
aplicación de la propiedad asociativa de la suma, es decir:
Se tiene que:
Ejemplo-3: Función Multiplicación
Por lo tanto, la definición recursiva de la
multiplicación es: