SlideShare una empresa de Scribd logo
1 de 22
RECURSION
ó
RECURSIVIDAD
Recursión ó Recursividad
• Recursividad
• 1. f. Cualidad de recursivo.
• Recursivo, va
• Del lat. recursus, part. pas. de recurrĕre 'recurrir', e -ivo.
• 1. adj. Sujeto a reglas o pautas recurrentes.
• 2. adj. Gram. Dicho especialmente de un proceso: Que se aplica de nuevo al
resultado de haberlo aplicado previamente. La subordinación es un proceso
recursivo.
• 3. adj. Gram. Dicho de una unidad o una estructura: Que puede contener
como constituyente otra del mismo tipo.
Aloe vera
Estructura de un huracán
Formación estelar
Muñeca Rusa
• Una matrioshka​, también llamada en
español muñeca rusa, matrioska,
mamushka o babushka es un conjunto
de muñecas tradicionales rusas
creadas en 1890. Su originalidad
consiste en que se encuentran huecas
y en su interior albergan una nueva
muñeca.
Recursividad: el concepto
• La recursividad es un concepto fundamental en matemáticas y en
computación.
• Es una alternativa diferente para implementar estructuras de
repetición (ciclos). Los módulos se hacen llamadas recursivas.
• Se puede usar en toda situación en la cual la solución pueda ser
expresada como una secuencia de movimientos, pasos o
transformaciones gobernadas por un conjunto de reglas no ambiguas.
Aplicación de la recursividad
• La recursividad es una técnica de programación muy potente que
puede ser utilizada en lugar de la iteración.
• Permite diseñar algoritmos recursivos que dan soluciones elegantes y
simples, y generalmente bien estructuradas y modulares, a problemas
de gran complejidad.
• Esta técnica permite que un algoritmo se invoque a sí mismo para
resolver una "versión más pequeña" del problema original que le fue
encomendado.
Función recursiva
• Caso recursivo: una solución que involucra volver a utilizar la función
original, con parámetros que se acercan más al caso base. Los pasos
que sigue el caso recursivo son los siguientes:
• El procedimiento se llama a sí mismo
• El problema se resuelve, tratando el mismo problema pero de tamaño menor
• La manera en la cual el tamaño del problema disminuye asegura que el caso
base eventualmente se alcanzará
Tipos de recursividad
• Directa: Cuando un subprograma se llama a sí mismo una o más
veces directamente.
• Indirecta: Cuando se definen una serie de subprogramas usándose
unos a otros.
Programación recursiva
• Un algoritmo recursivo consta de:
• Una parte recursiva
• Otra parte iterativa o no recursiva
• Una condición de terminación.
• La parte recursiva y la condición de terminación siempre
existen. En cambio la parte no recursiva puede coincidir con la
condición de terminación.
EJEMPLOS
Dado un entero positivo n, se define al factorial de n como el
producto de todos los enteros entre n y 1.
Por ejemplo el factorial de 5 = 5 * 4 * 3 * 2 * 1 = 120
Entonces: n! = 1 si n=0
Otra manera: n! = n * (n – 1) * (n – 2) … * 1 si n>0
LA FUNCIÓN FACTORIAL n!
Solución iterativa:
prod = 1
Entero i
Desde (i = n; i > 0; i = i – 1)
{ prod = prod * i }
Retornar prod;
Características de una función factorial
0! = 1
1! = 1 * 0!
2! = 2 * 1!
3! = 3 * 2!
…
n! = n * (n-1)!
Función Recursiva
entero Factorial(entero n)
{
entero fact
si (n=0) entonces
fact=1
sino
fact=n*Factorial(n-1)
retornar (fact)
}
Función Recursiva
entero Factorial(entero n)
{
entero fact
si (n=0) entonces
fact=1
sino
fact=n*Factorial(n-1)
retornar (fact)
}
FACTORIAL Y FUNCIONAMIENTO INTERNO
Siguiendo nuestra definición, el factorial de 5! es:
1. 5! = 5 * 4!
2. 4! = 4 * 3!
3. 3! = 3 * 2!
4. 2! = 2 * 1!
5. 1! = 1 * 0!
6. 0! = 1
6. 0! = 1,
5. 1! = 1 * 1 = 1
4. 2! = 2 * 1 = 2
3. 3! = 3 * 2 = 6
2. 4! = 4 * 6 = 24
1. 5! = 5 * 24 = 120
Internamente, las funciones recursivas
utilizan pilas para mantener las
generaciones sucesivas de variables
locales y parámetros.
Cada vez que se introduce una función recursiva se agrega
al tope de la pila una nueva asignación de sus variables.
Cuando retorna la función, se remueve la
pila, se libera la asignación en el tope, y la
asignación previa se convierte en el tope
actual de la pila.
old
new
SECUENCIA FIBONACCI
La serie Fibonacci comienza con los términos 0 y 1, y se observa que
cada elemento, a partir del tercero, es la suma de los dos elementos
anteriores:
Entonces se puede decir que:
Fibonacci (0) = 0
Fibonacci (1) = 1
…
Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2)
entero Fib(entero n)
{
si (n = 0 o n = 1) entonces
retornar (n)
sino
retornar (Fib(n-1) + Fib(n-2))
}
La definición recursiva será:
Fibonacci (n) = n si n = 0 o n = 1
Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2) si n >=2
Búsqueda binaria recursiva
• La búsqueda binaria es un método de localización de una clave
especificada dentro de una lista o arreglo ordenado de n elementos
que realiza una exploración de la lista hasta que se encuentra o se
decide que no se encuentra en la lista.
• El algoritmo de búsqueda binaria se puede describir recursivamente
aplicando el método divide y vencerás.
La búsqueda entre dos posiciones de un vector ordenado se puede
realizar comparando el valor buscado con el elemento central:
Si es igual, la búsqueda termina con éxito.
Si es menor, la búsqueda debe continuar en el subvector izquierdo.
Si es mayor, la búsqueda debe continuar en el subvector derecho.
entero busqueda(entero A[20], entero inf, entero sup, entero num)
{ entero central;
si (inf > sup) //No encontrado
retornar (-1)
sino
{ central = (inf + sup) / 2
si (A[central] = num) // Encontrado
retornar (central)
sino si (A[central] < num)
retornar busqueda(A, central+1, sup, num)
else
retornar busqueda(A, inf, central-1, num)
} }

Más contenido relacionado

La actualidad más candente

Diapositivas de Optimizacion
Diapositivas de OptimizacionDiapositivas de Optimizacion
Diapositivas de OptimizacionNileidys_16
 
Recursividad (Divide y Vencerás)
Recursividad (Divide y Vencerás)Recursividad (Divide y Vencerás)
Recursividad (Divide y Vencerás)Lester Sanchez
 
Metodo grafico
Metodo graficoMetodo grafico
Metodo graficobkike
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfijaOmarzingm
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
Espacios vectoriales diapositivas
Espacios vectoriales diapositivasEspacios vectoriales diapositivas
Espacios vectoriales diapositivasStefany De la Torre
 
PROGRAMACION LINEAL "METODO SIMPLEX"
PROGRAMACION LINEAL "METODO SIMPLEX"PROGRAMACION LINEAL "METODO SIMPLEX"
PROGRAMACION LINEAL "METODO SIMPLEX"ALEGRE_ALI
 
Programacion Lineal
Programacion LinealProgramacion Lineal
Programacion Linealmarciams
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesAngel Vázquez Patiño
 
Estructuras iterativas1
Estructuras iterativas1Estructuras iterativas1
Estructuras iterativas1Kathy Granizo
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
 
Busqueda Ascenso Colinas
Busqueda Ascenso ColinasBusqueda Ascenso Colinas
Busqueda Ascenso ColinasJeffoG92
 

La actualidad más candente (20)

Diapositivas de Optimizacion
Diapositivas de OptimizacionDiapositivas de Optimizacion
Diapositivas de Optimizacion
 
Recursividad directa e indirecta
Recursividad directa e indirectaRecursividad directa e indirecta
Recursividad directa e indirecta
 
Unidad 1. Programación entera
Unidad 1. Programación enteraUnidad 1. Programación entera
Unidad 1. Programación entera
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
Recursividad (Divide y Vencerás)
Recursividad (Divide y Vencerás)Recursividad (Divide y Vencerás)
Recursividad (Divide y Vencerás)
 
Sistemas de ecuaciones
Sistemas de ecuacionesSistemas de ecuaciones
Sistemas de ecuaciones
 
Metodo grafico
Metodo graficoMetodo grafico
Metodo grafico
 
Notación infija postfija
Notación infija postfijaNotación infija postfija
Notación infija postfija
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
Espacios vectoriales diapositivas
Espacios vectoriales diapositivasEspacios vectoriales diapositivas
Espacios vectoriales diapositivas
 
PROGRAMACION LINEAL "METODO SIMPLEX"
PROGRAMACION LINEAL "METODO SIMPLEX"PROGRAMACION LINEAL "METODO SIMPLEX"
PROGRAMACION LINEAL "METODO SIMPLEX"
 
Programacion Lineal
Programacion LinealProgramacion Lineal
Programacion Lineal
 
Programación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operacionesProgramación 3: Grafos, representación y operaciones
Programación 3: Grafos, representación y operaciones
 
Estructuras iterativas1
Estructuras iterativas1Estructuras iterativas1
Estructuras iterativas1
 
Clase4 - Operadores en Delphi
Clase4 - Operadores en DelphiClase4 - Operadores en Delphi
Clase4 - Operadores en Delphi
 
Recursividad
RecursividadRecursividad
Recursividad
 
Seno y coseno inverso
Seno y coseno inversoSeno y coseno inverso
Seno y coseno inverso
 
espacios vectoriales
espacios vectorialesespacios vectoriales
espacios vectoriales
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Busqueda Ascenso Colinas
Busqueda Ascenso ColinasBusqueda Ascenso Colinas
Busqueda Ascenso Colinas
 

Similar a 2 clase 1_recursividad (20)

Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Modulo4
Modulo4Modulo4
Modulo4
 
Curso recursividad
Curso   recursividadCurso   recursividad
Curso recursividad
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Cap1.1 recursividad
Cap1.1 recursividadCap1.1 recursividad
Cap1.1 recursividad
 
II Unidad
II UnidadII Unidad
II Unidad
 
II Unidad
II UnidadII Unidad
II Unidad
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Unidad 4 est. dat. recursividad
Unidad 4  est. dat. recursividadUnidad 4  est. dat. recursividad
Unidad 4 est. dat. recursividad
 
recursividadexposicion1-090727182853-phpapp01.ppt
recursividadexposicion1-090727182853-phpapp01.pptrecursividadexposicion1-090727182853-phpapp01.ppt
recursividadexposicion1-090727182853-phpapp01.ppt
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 

2 clase 1_recursividad

  • 2. Recursión ó Recursividad • Recursividad • 1. f. Cualidad de recursivo. • Recursivo, va • Del lat. recursus, part. pas. de recurrĕre 'recurrir', e -ivo. • 1. adj. Sujeto a reglas o pautas recurrentes. • 2. adj. Gram. Dicho especialmente de un proceso: Que se aplica de nuevo al resultado de haberlo aplicado previamente. La subordinación es un proceso recursivo. • 3. adj. Gram. Dicho de una unidad o una estructura: Que puede contener como constituyente otra del mismo tipo.
  • 4. Estructura de un huracán
  • 6. Muñeca Rusa • Una matrioshka​, también llamada en español muñeca rusa, matrioska, mamushka o babushka es un conjunto de muñecas tradicionales rusas creadas en 1890. Su originalidad consiste en que se encuentran huecas y en su interior albergan una nueva muñeca.
  • 7. Recursividad: el concepto • La recursividad es un concepto fundamental en matemáticas y en computación. • Es una alternativa diferente para implementar estructuras de repetición (ciclos). Los módulos se hacen llamadas recursivas. • Se puede usar en toda situación en la cual la solución pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas.
  • 8. Aplicación de la recursividad • La recursividad es una técnica de programación muy potente que puede ser utilizada en lugar de la iteración. • Permite diseñar algoritmos recursivos que dan soluciones elegantes y simples, y generalmente bien estructuradas y modulares, a problemas de gran complejidad. • Esta técnica permite que un algoritmo se invoque a sí mismo para resolver una "versión más pequeña" del problema original que le fue encomendado.
  • 9. Función recursiva • Caso recursivo: una solución que involucra volver a utilizar la función original, con parámetros que se acercan más al caso base. Los pasos que sigue el caso recursivo son los siguientes: • El procedimiento se llama a sí mismo • El problema se resuelve, tratando el mismo problema pero de tamaño menor • La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará
  • 10. Tipos de recursividad • Directa: Cuando un subprograma se llama a sí mismo una o más veces directamente. • Indirecta: Cuando se definen una serie de subprogramas usándose unos a otros.
  • 11. Programación recursiva • Un algoritmo recursivo consta de: • Una parte recursiva • Otra parte iterativa o no recursiva • Una condición de terminación. • La parte recursiva y la condición de terminación siempre existen. En cambio la parte no recursiva puede coincidir con la condición de terminación.
  • 13. Dado un entero positivo n, se define al factorial de n como el producto de todos los enteros entre n y 1. Por ejemplo el factorial de 5 = 5 * 4 * 3 * 2 * 1 = 120 Entonces: n! = 1 si n=0 Otra manera: n! = n * (n – 1) * (n – 2) … * 1 si n>0 LA FUNCIÓN FACTORIAL n!
  • 14. Solución iterativa: prod = 1 Entero i Desde (i = n; i > 0; i = i – 1) { prod = prod * i } Retornar prod; Características de una función factorial 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! … n! = n * (n-1)! Función Recursiva entero Factorial(entero n) { entero fact si (n=0) entonces fact=1 sino fact=n*Factorial(n-1) retornar (fact) }
  • 15. Función Recursiva entero Factorial(entero n) { entero fact si (n=0) entonces fact=1 sino fact=n*Factorial(n-1) retornar (fact) }
  • 16. FACTORIAL Y FUNCIONAMIENTO INTERNO Siguiendo nuestra definición, el factorial de 5! es: 1. 5! = 5 * 4! 2. 4! = 4 * 3! 3. 3! = 3 * 2! 4. 2! = 2 * 1! 5. 1! = 1 * 0! 6. 0! = 1 6. 0! = 1, 5. 1! = 1 * 1 = 1 4. 2! = 2 * 1 = 2 3. 3! = 3 * 2 = 6 2. 4! = 4 * 6 = 24 1. 5! = 5 * 24 = 120 Internamente, las funciones recursivas utilizan pilas para mantener las generaciones sucesivas de variables locales y parámetros. Cada vez que se introduce una función recursiva se agrega al tope de la pila una nueva asignación de sus variables. Cuando retorna la función, se remueve la pila, se libera la asignación en el tope, y la asignación previa se convierte en el tope actual de la pila. old new
  • 17. SECUENCIA FIBONACCI La serie Fibonacci comienza con los términos 0 y 1, y se observa que cada elemento, a partir del tercero, es la suma de los dos elementos anteriores: Entonces se puede decir que: Fibonacci (0) = 0 Fibonacci (1) = 1 … Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2)
  • 18. entero Fib(entero n) { si (n = 0 o n = 1) entonces retornar (n) sino retornar (Fib(n-1) + Fib(n-2)) } La definición recursiva será: Fibonacci (n) = n si n = 0 o n = 1 Fibonacci (n) = Fibonacci (n-1) + Fibonacci (n-2) si n >=2
  • 19. Búsqueda binaria recursiva • La búsqueda binaria es un método de localización de una clave especificada dentro de una lista o arreglo ordenado de n elementos que realiza una exploración de la lista hasta que se encuentra o se decide que no se encuentra en la lista. • El algoritmo de búsqueda binaria se puede describir recursivamente aplicando el método divide y vencerás.
  • 20. La búsqueda entre dos posiciones de un vector ordenado se puede realizar comparando el valor buscado con el elemento central: Si es igual, la búsqueda termina con éxito.
  • 21. Si es menor, la búsqueda debe continuar en el subvector izquierdo. Si es mayor, la búsqueda debe continuar en el subvector derecho.
  • 22. entero busqueda(entero A[20], entero inf, entero sup, entero num) { entero central; si (inf > sup) //No encontrado retornar (-1) sino { central = (inf + sup) / 2 si (A[central] = num) // Encontrado retornar (central) sino si (A[central] < num) retornar busqueda(A, central+1, sup, num) else retornar busqueda(A, inf, central-1, num) } }