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.
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)
}
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)
} }