Sunteți pe pagina 1din 16

RECURSIVIDAD

Grupo Nº 1
Cristhian David Ramos
Cusihuaman
Jhon Edison Collantes
Hanampa

???????
Prof. Ing. William A. Chavez Espinoza. ???????
CONCEPTO

Es una Técnica que permite que una función se


llame a si misma.
El concepto de Recursividad va ligado a la
repetición.
Son Recursivos aquellos algoritmos que,
estando encapsulados dentro de una función,
son llamados desde ella misma una y otra vez,
en contraposición a los algoritmos iterativos
que hacen uso de bucles while, do-while, for,
etc.
Para que una función recursiva sea válida, la
referencia a sí misma debe ser relativamente más
sencilla que el caso considerado.
En un algoritmo recursivo distinguimos como
mínimo 2 partes:
a). Caso trivial, base o fin de recursión:
Es un caso donde el problema puede resolverse sin
tener que hacer uso de una nueva llamada a sí
mismo. Evita la continuación indefinida de las partes
recursivas.
b). Parte puramente recursiva:
Relaciona el resultado del algoritmo con resultados
de casos mas simples. Se hacen nuevas llamadas a
la función, pero están más próximas al caso base.
Ejemplos:
ITERATIVO:

Int Factorial (int n )


{
Int ¡, res = 1;
For(¡=1;¡<=n;¡++ )
res = res*¡;
return (res);
}

RECURSIVO:

Int Factorial (int n )


{
If (n==0) return (1);
Return (n*Factorial (n-1));
}
UTILIDAD DE LA RECURSIVIDAD

Se utiliza para realizar una llamada a una


función desde la misma función.

Hemos visto que la recursión es una técnica


potente de programación para resolver,
mediante soluciones simples y claras,
problemas de gran complejidad.
La sobrecarga asociada con las llamadas a
subalgoritmos:

Este factor es propio de los subalgoritmos en


general, aunque es mayor con la recursividad ,
ya que una simple llamada inicial a un
subalgoritmo puede generar un gran número de
llamadas recursivas .

Podemos fácilmente escribir una función


iterativa Factorial tan clara como la recursiva y
sin la sobre carga de ésta.
TIPOS DE RECURSIVIDAD
Recursividad Simple: Aquella en cuya definición
sólo aparece una llamada recursiva. Se puede
transformar con facilidad en algoritmos
iterativos.
Recursividad Múltiple: Se da cuando hay más de
una llamada a sí misma dentro del cuerpo de la
función, resultando más difícil de hacer de
forma iterativa.

int Fib( int n ) /* ej: Fibonacci */


{
if(n<=1) return(1);
return(Fib(n-1) + Fib(n-2));
}
TIPOS DE RECURSIVIDAD

Recursividad Anidada: En algunos de los


argumentos de la llamada recursiva hay una
nueva llamada a sí misma.

int Ack( int n, int m ) /* ej: Ackerman */


{
if(n==0 ) return(m+1);
else if(m==0) return(Ack(n-1,1));
return(Ack(n-1, Ack(n,m-1)));
}
TIPOS DE RECURSIVIDAD
Recursividad cruzada o indirecta: Son algoritmos
donde una función provoca una llamada a sí
misma de forma indirecta, a través de otras
funciones.
Ej: Par o Impar:
int par( int nump )
{
if(nump==0) return(1);
return( impar(nump-1));
}
int impar( int numi )
{
if(numi==0) return(0);
return( par(numi-1));
}
ALGORITMO TIPICO
ALGORITMO: DIVIDE Y VENCERAS

Una de las técnicas más importantes para el diseño de


algoritmos típicos en la Recursividad es la técnica
llamada:”Divide y Vencerás”. Esta técnica consiste en
transformar un problema de tamaño n en problemas más
pequeños, de tamaño menor que n.
El algoritmo de búsqueda binario es un ejemplo típico de
esta técnica algorítmica. La lista ordenada de los elementos
se divide en dos mitades de forma de que el problema de
búsqueda de un elemento se reduce al problema de
búsqueda en una mitad; así se prosigue dividiendo el
problema hasta encontrar el elemento, o bien decir que no se
encuentra.
Un algoritmo “Divide y Vencerás”, puede ser definido de
manera recursiva, de tal modo que se llama así mismo
aplicándose cada vez a un conjunto menor de elementos.
ALGORITMO TIPICO

Ordenación por inserción

Se trata de ordenar un vector formado por n


enteros. Para esto el algoritmo de inserción
va intercambiando elementos del array
hasta que esté ordenado.
ALGORITMO TIPICO
void insercion (int a[])
{
int i, j, x;

for (i=1; i
x = a[i];
j = i - 1;
while ((j>-1) && (a[j]>x)) {
a[j+1] = a[j];
j = j - 1;
}
a[j+1] = x;
}
}
ALGORITMO TIPICO

Ordenación por selección

Se trata de ordenar un vector formado por n


enteros. Para esto el algoritmo de selección
va seleccionando los elementos menores al
actual y los intercambia.
ALGORITMO TIPICO
void seleccion (int a[])
{
int i, j;
int minx, minj;

for (i=0; i < n-1; i++) {


minj = i;
minx = a[i];
for (j = i; j < n; j++) {
if (a[j] < minx) {
minj = j;
minx = a[j];
}
}
a[minj] = a[i];
a[i] = minx;
}
}
IMPLEMENTACIÓN ALGORITMOS
RECURSIVOS
• Ejercicio: Escribir una función recursiva que calcule la
división entera entre dos números:
int DivisionEntera(int a, int b, int &resto)
{
int cociente;
if ( a < b) {
resto = a;
cociente = 0;
}
else
{
a= a - b;
cociente = cociente + 1;
cociente = DivisionEntera(a, b, resto);
}
return cociente;
}
Gracias

S-ar putea să vă placă și