Está en la página 1de 65

RECURSIVIDAD

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

 Un algoritmo es recursivo cuando se llama a sí


mismo, directa o indirectamente
Subprograma recursivo
 Cuando se diseña subprogramas recursivos se
tiene la siguiente situación:
Subprograma recursivo
 Una función recursiva tiene la forma:
Ejemplos de Funciones Recursivas
Función FACTORIAL
Ejm: Función Factorial

 Función Factorial se define para números


naturales, para n >= 0, como:
n! = 1 * 2 * 3 * 4 *….* n
n! = n * (n-1) * (n-2) * ….* 2 * 1
 Ejemplos de la función factorial
0! = 1
1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
4! = 1 * 2 * 3 * 4 = 24
Ejem: Algoritmo Iterativo o normal de la
Función Factorial
 Ejemplo: Algoritmo de función factorial Iterativo
Ejem: Algoritmo Recursivo de la
Función Factorial
 Ejemplo: Algoritmo de función factorial recursivo
para números enteros positivos

n = 0
Ejem: Función Recursiva de la
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);
}
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

 Función Sumatorio se define para los primeros n


números naturales, para n >= 0, como:
suma(n) = 1 + 2 + 3 + 4 +….+ n
 Ejemplos de la función factorial
Suma(0) = 0
Suma(1) = 1
Suma(2) = 1 + 2 = 3
Suma(3) = 1 + 2 + 3 = 6
Suma(4) = 1 + 2 + 3 + 4 = 10
Ejem: Algoritmo Iterativo o normal de la
Función Sumatorio
 Ejemplo: Algoritmo de función Sumatorio Iterativo
para números enteros positivos
Ejem: Algoritmo Recursivo de la
Función Sumatorio
 Ejemplo: Algoritmo de función Sumatorio recursivo
para números enteros positivos
Ejem: Función Recursiva de la
Función Sumatorio
 Ejemplo: función Sumatorio recursivo para
números enteros positivos
int sumatorio ( int n )
{

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

 Todo algoritmo recursivo consta de dos partes:


 1. Componente Base: Resolución del caso base
 Se aplica cuando se cumple la condición de parada.
 Se resuelve de modo trivial.
 2. Componente Recursivo: Realización de la(s)
llamada(s) recursiva(s)
 Se llama a la función en un caso más simple.
 En ocasiones se realiza alguna operación adicional antes
o después.
Estructura de un algoritmo Recursivo

 Ejemplo-1: Función Factorial para números


enteros positivos
int factorial(int n) //definición de la función
{
int fact;

if(n==0)
Caso Base
fact = 1;
else
fact = n*factorial(n-1); Paso de
return(fact); Recursión
}
Estructura de un algoritmo Recursivo

 Ejemplo-2: Función sumatoria de los N primeros números


naturales

int sumatorio ( int n )


{

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

int sumatorio ( int n )


{

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

int sumatorio ( int n )


{

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 sumatorio1 (int n)


{
if( n == 0 )
return 0 ;
else
return sumatorio2(n) ;
}

//---------------------------------
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:

 La condición de salida o base es:


 f(n) = 1 para n = 0

 La condición de recursión es:


 f(n) = n*f(n-1) para n > 0
Ejemplo-1: Función Factorial
 Función factorial

 Luego obtenemos:

 Asi:
Ejemplo-1: Función Factorial
 De modo que la definición recursiva del factorial es:

 Por lo tanto se tiene que


Ejemplo-1: Función Factorial
 Ejemplo: Algoritmo de función factorial recursivo
para números enteros positivos

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

 La condición de salida o base es:


 t(n) = 0 para n = 0

 La condición de recursión es:


 t(n) = n + t(n-1) para n > 0
Ejemplo-2: Función Sumatorio
 Función sumatorio de los primeros n números enteros positivos,
tiene la forma:

 Se define la función f(n) donde n puede ser cualquier número


mayor o igual a 1 (n >= 1).
Ejemplo-2: Función Sumatorio
 Se conoce que al sumar 0 a cualquier número éste se
mantiene. De ahí se desprende que la sumatoria de cero es
cero. Para cualquier otro entero positivo, la sumatoria se
calcula adicionando su propio valor a la sumatoria del número
inmediatamente inferior. Así:
Ejemplo-2: Función Sumatorio
 De esto se desprende que:

 De esta manera se plantea una solución recursiva donde a)


representa el criterio base y b) la invocación recursiva de la
función
Ejemplo-2: Función Sumatorio
 Ejemplo: Algoritmo de función Sumatorio recursivo
para números enteros positivos
Ejemplo-2: Función Sumatorio
 Ejemplo-2: función Sumatorio recursivo para números
enteros positivos

int sumatorio ( int n )


{

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

int sumatorio ( int n )


{
if ( n < 0 ){ //--- verificación de error
return -1
}

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:

 Asociando los sumandos como sigue:

 Se tiene que:
Ejemplo-3: Función Multiplicación
 Por lo tanto, la definición recursiva de la
multiplicación es:

 La condición de salida o base es:


 mult(a, b) = 0 para b = 0

 La condición de recursión es:


 mult(a, b) = a + mult(a, b-1) para b > 0
Ejemplo-3: Función Multiplicación
 Ejemplo-3: Algoritmo función Multiplicación
recursivo
FIN

También podría gustarte