Beruflich Dokumente
Kultur Dokumente
Recursividad
Prof.: Mauricio Solar
Primer Semestre,
2010
Indice
Introduccin
Definicin
Condiciones para la Recursividad
Tipos de Recursividad
Aplicaciones
Ejemplo Matrushka
La Matrushka es una artesana tradicional rusa.
Es una mueca de madera que contiene otra mueca ms pequea
dentro de s. Esta mueca, tambin contiene otra mueca dentro.
Y as, una dentro de otra.
Introduccin
En las siglas del proyecto GNU de la Free Software
Foundation, las siglas GNU significan GNU is Not Unix.
En ella, para definir una cosa se hace referencia a ella misma,
la definicin no resulta entonces muy til.
Pero esto mismo, utilizado como tcnica de programacin,
resulta ser muy til e interesante.
Esto se conoce como recurrencia.
Definicin
Consiste en definir valor de una funcin en trminos de
instancias ms simples, menores o anteriores de la misma
funcin, llegando hasta una instancia tan simple que el valor se
determina en forma inmediata.
Tiene que ver con el principio de induccin: si se establece
una proposicin que es vlida para el primer elemento de un
conjunto numerable y si, suponiendo que esta proposicin es
vlida para el n-simo elemento del conjunto, se puede deducir
que es vlida tambin para el sucesor de l, entonces se puede
afirmar que es vlida para cualquier elemento del conjunto.
Introduccin
Ejemplo 1: Factorial de un nmero
F(n) = n(n - 1 ) !
Ejemplo 2: Nmero de Fibonacci
F(n) = F(n-1) + F(n-2)
F(0) = 0
F(1) = 1
Introduccin
Ejemplo 3: Las Torres de Hanoi
Introduccin
Las definiciones recursivas se traducen fcilmente a instrucciones
del lenguaje :
int factorial (int n) {
if (n == 0)
return 1 ;
else
return (n * factorial (n-1)) ;
}
Cmo funciona?
Cada llamada recursiva siempre debe tender a un caso base que
puede resolverse sin recursin.
El caso base puede no realizar accin alguna, pero lo
importante es que se llegue a un punto en el que no se
produzcan ms auto-llamadas.
Para alcanzar el caso base, es necesario que los parmetros de
cada llamada recursiva, deben corresponder a un caso ms
pequeo del problema inicial.
Tras el caso base, se producir un retorno en el que el resultado
de cada llamada se ir incorporando al de la llamada anterior
hasta obtener un resultado definitivo que ser devuelto a la
sentencia que realiz la primera llamada al algoritmo.
Cmo funciona?
Cuando un algoritmo se llama a si mismo es como si se
ejecutase un nuevo proceso mientras el anterior permanece
dormido.
Cmo funciona?
Es fcil suponer que sin caso base las infinitas llamadas
recursivas provocaran un desbordamiento de pila (Stack
Overflow).
El cdigo que permite la recursin es aadido automticamente
cuando el compilador detecta una llamada recursiva.
llamada
funcin
retorno
valor
5
120
n!
24
n!
Ejemplo: valor de la
serie para i = 4
4
F4
2
F2
F3
F0
0
F1
F1
F2
0
F0
0
F1
Recursividad Directa
Recursividad Indirecta
Recursividad Indirecta
Ejemplos
Convierte decimal a binario:
while n >0
resto = (n % 2)
write(resto);
n= n / 2
Ejemplos
La solucin recursiva imprimir el resultado correcto:
Convierte (n) {
if (n !=0 )
Convierte(n / 2)
write (n % 2)
}
Bibliografa Webgrafa
Estructuras de Datos y Anlisis de Algoritmos. Una
Introduccin usando Java. Jos Galaviz Casas. Departamento de
Matemticas, Facultad de Ciencias. UNAM.
http://ocw.udem.edu.mx/cursos-de-profesional/estructura-dedatos/contenido/modulo2_la_recursividad/recursividad/