SlideShare una empresa de Scribd logo
1 de 24
EQUIPO Nº 4
RECURSIVIDAD
ALVARADO ROSA
NELFALY MEDINA
BETZY RODRIGUEZ
VASQUEZ ALBA
RIVAS MIRIAM
RIOS LUIS
Prof. Ing. Zamantha González. PNFSI. Cojedes.
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.
CONCEPTO
CONCEPTO
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.
CONCEPTO
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.
UTILIDAD DE LA RECURSIVIDAD
UTILIDAD DE LA RECURSIVIDAD
Ej: de Factorial en algoritmo:
N es 3
FACTORIAL 3* FACTORIAL (2)
Retorno
N es 2
FACTORIAL 2* FACTORIAL (1)
Retorno
N es 1
FACTORIAL 1* FACTORIAL (0)
Retorno
N es 0
FACTORIAL 1
Retorno
FACT FACTORIAL (3)
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: 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
ALGORITMO TIPICO
TORRE DE HANOI: Problema de solución
recursiva, consiste en mover todos los discos
(de diferentes tamaños) de una aguja a otra,
Usando una aguja auxiliar, y sabiendo que un
disco no puede estar sobre otro menor que
éste.
ALGORITMO TIPICO
1 2 3
A B C
ALGORITMO TIPICO
/* Solución :
1- Mover n-1 discos de A a B
2- Mover 1 discos de A a C
3- Mover n-1 discos de B a C
*/
Void Hanoi(n,inicial,aux,final)
{
if( n>0)
{
Hanoi (n-1,inicial,final,aux);
printf (“Mover % d de % c”, n,inicial,final);
Hanoi (aux, inicial,final);
}
}
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;
}
}
Satisface dos interrogantes
1.- ¿Cómo se resuelve el caso mas pequeño del
problema?
2.- ¿Cómo se resuelve el caso general del
problema, sabiendo que tiene el caso anterior
mas pequeño?
IMPLEMENTACIÓN
ALGORITMOS RECURSIVOS
IMPLEMENTACIÓN
ALGORITMOS RECURSIVOS
RECURSIVO
A
S
C
E
N
D
E
N
T
E
D
E
S
C
E
N
D
E
N
T
E
REGRESIVO
PROGRESIVO
IMPLEMENTACIÓN
ALGORITMOS RECURSIVOS
GRANDE
PEQUEÑO
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;
}
IMPLEMENTACIÓN
ALGORITMOS RECURSIVOS
A B Rest. Cociente
10 5 Ø 1
5 5 Ø 1
0 5 0 2
5
10
2
=
a < b
10<5 F
a < b
5<5 F
a = 5-5 a=0 Cociente 1+1=2
a < b
0<5 V
Gracias

Más contenido relacionado

Similar a recursividadexposicion1-090727182853-phpapp01.ppt

Similar a recursividadexposicion1-090727182853-phpapp01.ppt (20)

03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
Metodologia de la programacion recursividad
Metodologia de la programacion   recursividadMetodologia de la programacion   recursividad
Metodologia de la programacion recursividad
 
Tutorial rapido de octave
Tutorial rapido de octaveTutorial rapido de octave
Tutorial rapido de octave
 
Recursividad
RecursividadRecursividad
Recursividad
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Recursividad
RecursividadRecursividad
Recursividad
 
ESTRUCTURA DE DATOS
ESTRUCTURA DE DATOSESTRUCTURA DE DATOS
ESTRUCTURA DE DATOS
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Capítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdfCapítulo 3 Algoritmos recursivos.pdf
Capítulo 3 Algoritmos recursivos.pdf
 
Recursividad
RecursividadRecursividad
Recursividad
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
Informe Técnico - Recursividad Unidad 2 (Rubi Veronica)
 
RECURSIVIDAD C++
RECURSIVIDAD C++RECURSIVIDAD C++
RECURSIVIDAD C++
 
Divide y Vencerás
Divide y VencerásDivide y Vencerás
Divide y Vencerás
 
Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
Esquema algorítmico del backtracking
Esquema algorítmico del  backtrackingEsquema algorítmico del  backtracking
Esquema algorítmico del backtracking
 
Esquema algorítmico del backtracking
Esquema algorítmico del  backtrackingEsquema algorítmico del  backtracking
Esquema algorítmico del backtracking
 
TECNICAS DE RESOLUCION DE PROBLEMAS
TECNICAS DE RESOLUCION DE PROBLEMASTECNICAS DE RESOLUCION DE PROBLEMAS
TECNICAS DE RESOLUCION DE PROBLEMAS
 

Último

Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 

Último (7)

Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

recursividadexposicion1-090727182853-phpapp01.ppt

  • 1. EQUIPO Nº 4 RECURSIVIDAD ALVARADO ROSA NELFALY MEDINA BETZY RODRIGUEZ VASQUEZ ALBA RIVAS MIRIAM RIOS LUIS Prof. Ing. Zamantha González. PNFSI. Cojedes.
  • 2. 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. CONCEPTO
  • 3. CONCEPTO 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.
  • 4. CONCEPTO 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)); }
  • 5. 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.
  • 6. 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. UTILIDAD DE LA RECURSIVIDAD
  • 7. UTILIDAD DE LA RECURSIVIDAD Ej: de Factorial en algoritmo: N es 3 FACTORIAL 3* FACTORIAL (2) Retorno N es 2 FACTORIAL 2* FACTORIAL (1) Retorno N es 1 FACTORIAL 1* FACTORIAL (0) Retorno N es 0 FACTORIAL 1 Retorno FACT FACTORIAL (3)
  • 8. 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)); }
  • 9. 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))); }
  • 10. 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)); }
  • 11. 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
  • 12. ALGORITMO TIPICO TORRE DE HANOI: Problema de solución recursiva, consiste en mover todos los discos (de diferentes tamaños) de una aguja a otra, Usando una aguja auxiliar, y sabiendo que un disco no puede estar sobre otro menor que éste.
  • 14. ALGORITMO TIPICO /* Solución : 1- Mover n-1 discos de A a B 2- Mover 1 discos de A a C 3- Mover n-1 discos de B a C */ Void Hanoi(n,inicial,aux,final) { if( n>0) { Hanoi (n-1,inicial,final,aux); printf (“Mover % d de % c”, n,inicial,final); Hanoi (aux, inicial,final); } }
  • 15. 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.
  • 16. 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; } }
  • 17. 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.
  • 18. 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; } }
  • 19. Satisface dos interrogantes 1.- ¿Cómo se resuelve el caso mas pequeño del problema? 2.- ¿Cómo se resuelve el caso general del problema, sabiendo que tiene el caso anterior mas pequeño? IMPLEMENTACIÓN ALGORITMOS RECURSIVOS
  • 22. 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; }
  • 23. IMPLEMENTACIÓN ALGORITMOS RECURSIVOS A B Rest. Cociente 10 5 Ø 1 5 5 Ø 1 0 5 0 2 5 10 2 = a < b 10<5 F a < b 5<5 F a = 5-5 a=0 Cociente 1+1=2 a < b 0<5 V