Está en la página 1de 3

UNIVERSIDAD TÉCNICA ESTATAL DE QUEVEDO

FACULTAD CIENCIAS DE LA INGENIERÍA

INGENIERÍA INDUSTRIAL

DISEÑO DE REDES

AUTORES

ERIKA XIOMARA ARRISIAGA LITARDO

ANGIE MABEL RIVAS GUERRERO

MÓDULO VII

ASIGNATURA

DISEÑO DE REDES

DOCENTE

ING. NAVARRETE GOMEZ ROGELIO

TEMA

ALGORITMO DE RECURSIVIDAD

PERÍODO LECTIVO

PRIMER PERIODO ACADEMICO

2019-2010
ALGORITMO DE RECURSIVIDAD
¿Alguna vez has visto un juego de muñecas rusas? Al principio, solo ves una figurilla,
generalmente de madera pintada, que se ve más o menos así:

Puedes quitar la mitad de arriba de la primera muñeca, ¿y qué ves adentro? ¡Otra
muñeca rusa, un poco más pequeña!

Puedes quitar esa muñeca y separar sus mitades superior e inferior. Y


ves, una vez más, otra muñeca más pequeña:

Y una vez más:

Y puedes continuar. Eventualmente encontrarás la muñeca rusa más


pequeña. Es de una sola pieza, así que no se abre:
Empezamos con una muñeca rusa grande, y vimos
muñecas rusas más y más pequeñas, hasta que
vimos una que era tan pequeña que no ya no puede
contener a otra.
¿Qué tienen que ver las muñecas rusas con los algoritmos? Así como una muñeca rusa tienen
una muñeca rusa más pequeña dentro de ella, que tiene una muñeca rusa aún más pequeña
dentro de ella, hasta llegar a una muñeca rusa tan pequeña que ya no puede contener otra,
vamos a ver cómo diseñar un algoritmo para resolver un problema de modo que resuelva una
instancia más pequeña del mismo problema, a menos que el problema sea tan pequeño que
lo podamos resolver directamente. A esta técnica la llamamos recursividad.
La recursividad tiene muchas, muchas aplicaciones. En este módulo vamos a ver cómo usar
la recursividad para calcular la función factorial, para determinar si una palabra es un
palíndromo, para calcular potencias de un número, para dibujar un tipo de fractal y para
resolver el antiguo problema de las Torres de Hanoi. En módulos más adelante usaremos
recursividad para resolver otros problemas, incluyendo ordenamientos.
Esta es la idea básica detrás de los algoritmos recursivos:
Para resolver un problema, resuelve un subproblema que sea una instancia más pequeña del
mismo problema, y después usa la solución de esa instancia más pequeña para resolver el
problema original.
Cuando calculamos n!n!, resolvimos el problema de calcular n!n! (el problema original) al
resolver el subproblema de calcular el factorial de un número menor, es decir, al calcular (n-
1)!(n−1)! (la instancia más pequeña del mismo problema), y después al usar la solución del
subproblema para calcular el valor de n!n!.
Para que un algoritmo recursivo funcione, los subproblemas más pequeños eventualmente
deben llegar al caso base. Cuando calculamos n!n!, los subproblemas se hacen más y más
pequeños hasta que calculamos 0!0!. Debesasegurarte de que, eventualmente, llegues al caso
base.
Por ejemplo, ¿qué pasaría si tratáramos de calcular el factorial de un número negativo al usar
nuestro método recursivo? Para calcular (-1)!(−1)!, primero tratarías de calcular (-2)!(−2)!,
para poder multiplicar el resultado por -1−1minus, 1. Pero para calcular (-2)!(−2)!, primero
tratarías de calcular (-3)!(−3)!, para poder multiplicar el resultado por -2−2minus, 2. Y
después tratarías de calcular (-3)!(−3)!, y así sucesivamente. Claro, los números se están
haciendo más pequeños, pero también se están alejando cada vez más del caso base de
calcular 0!0!. Nunca obtendrías una respuesta.
Incluso aunque puedas garantizar que el valor de nnn no sea negativo, aún así puedes meterte
en problemas si no haces los subproblemas progresivamente más pequeños. Aquí hay un
ejemplo. Vamos a tomar la fórmula n! = n \cdot (n-1)!n!=n⋅(n−1)! y dividir ambos lados
entre nnn, para obtener n! / n = (n-1)!n!/n=(n−1)!. Hagamos una nueva variable , mmm, que
sea igual a n+1n+1n, plus, 1. Como nuestra fórmula aplica para cualquier número positivo,
vamos a sustituir mmm por nnn, para obtener m! / m = (m-1)!m!/m=(m−1)!. Como m =
n+1m=n+1m, equals, n, plus, 1, ahora tenemos (n+1)! / (n+1) = (n+1-
1)!(n+1)!/(n+1)=(n+1−1)!. Al intercambiar lados y observar que n+1-1 = nn+1−1=nn, plus,
1, minus, 1, equals, n, obtenemos n! = (n+1)! / (n+1)n!=(n+1)!/(n+1). Esta fórmula nos hace
creer que puedes calcular n!n! al primero calcular (n+1)!(n+1)! y después dividir el resultado
entre n+1n+1n, plus, 1. Pero para calcular (n+1)!(n+1)!, tendrías que calcular (n+2)!(n+2)!,
luego (n+3)!(n+3)!, y así sucesivamente. Nunca llegarías al caso base de 0. ¿Por qué no?
Porque cada problema recursivo te pide calcular el valor de un número más grande, no de un
número más pequeño. Si nnn es positivo, nunca llegarías al caso base de 0.
Podemos extraer la idea de la recursión en dos reglas sencillas:
1. Cada llamada recursiva debe ser sobre una instancia más pequeña del mismo problema, es
decir, un subproblema más pequeño.
2. Las llamadas recursivas eventualmente deben alcanzar un caso base, el cual se resuelve sin
más recursividad.
Regresemos a las muñecas rusas. Aunque no aparecen en ningún algoritmo, puedes ver que
cada muñeca encierra a todas las muñecas más pequeñas (de manera análoga al caso
recursivo), hasta que la muñeca más pequeña no encierra a ninguna otra (como el caso base).

También podría gustarte