Professional Documents
Culture Documents
LA IDEA DE RECURSIVIDAD
1.1
Introduccin
1.2
Entre los aos 1907 y 1914 floreci una nueva fase del arte moderno en Paris. Sus
detractores le dieron el nombre de cubismo, este movimiento estaba basado en la teora de
que la naturaleza debe representarse en trminos de sus componentes geomtricos tales
como conos, cilindros y esferas. Aunque la comunidad cubista se disolvi con el inicio de
la Primera Guerra Mundial, las ideas del movimiento permanecieron como una poderosa
fuerza que dio forma a las ideas posteriores en arte abstracto. En particular, influy en el
trabajo del pintor holands Piet Mondrian cuyo trabajo est caracterizado por la rigidez de
patrones geomtricos de lneas verticales y horizontales.
La tendencia del trabajo de Mondrian a travs de una estructura geomtrica simple lo hace
particularmente apropiado para la simulacin en computadora. Muchos de los primeros
esfuerzos por generar arte por computadora se basaron en este estilo. En la figura siguiente
podemos ver que el diseo consiste en un gran rectngulo que se corta en rectngulos
menores por una secuencia de lneas verticales y horizontales. El punto aqu es encontrar
una estrategia general para generar un diseo as, que como puede observarse parte del
hecho de dividir dicho rectngulo.
Esto nos lleva a la idea de fractales donde se observa que tambin hay un patrn que se
repite. Como podemos verlo en la figura siguiente:
1 http://www.stephen.com/mondrimat/
2 http://dubrieldice.blogspot.mx/2010/10/fractales.html
3
Una manera prctica de dibujar una espiral es mediante la construccin rectangular en las
espirales de cuadrados; se trata de dibujar el cuadrante de un crculo en cada nuevo
cuadrado que se aada.
3
http://www.ite.educacion.es/formacion/enred/web_espiral/general_1/naturaleza
_1/vegetal_1/vegetal.htm
4 http://moirajohnson.blog.com/2013/06/24/nautilus/
4
En la construccin anterior, se empieza con un cuadrado de 1 unidad de lado (el nmero 1),
se aade uno igual para formar un rectngulo de 2 x 1, a continuacin aadimos un
cuadrado de 2 x 2 (el nmero 3) para formar un rectngulo de 3 x 2; despus un cuadrado
de 3 x 3 (el nmero 4), de manera que el siguiente rectngulo es 5 x 3, el siguiente
cuadrado es 5 x 5 (el nmero 5), y as sucesivamente.
En literatura tambin se encuentra en cuentos hinds as como en una clebre novela de
Lewis Carroll entre otros.
1.3.1
Algoritmos recursivos
Se dice que un objeto es recursivo, si en parte est formado por si mismo o se define en
funcin de si mismo. La recursin se encuentra no slo en matemticas, sino tambin en la
vida diaria. Una imagen pictrica de esta idea es la figura 1.8.
n 1
es natural entonces
n!
lo es.
5 http://wordaligned.org/articles/recursive-pictures
6
0! 1
n 0 : n! n(n 1)!
Una propiedad importante de rboles que servir para la construccin del rbol es la
siguiente:
t1 y t 2
Si
son rboles, entonces las estructuras formadas por un nodo con dos
rboles descendientes tambin son un rbol.
Nuevamente vemos en la figura 1.11 el siguiente paso para la construccin del rbol y se
muestran dos rboles construidos a partir de los cinco originales, el ltimo paso da como
resultado el rbol de la figura 1.9.
P P S , P
La herramienta necesaria y suficiente para expresar los programas recursivamente es el
procedimiento o subrutina, ya que permite dar a una proposicin un nombre con el cual
puede ser llamada. Si un procedimiento P contiene una referencia explcita a si mismo se le
denomina directamente recursivo; por otro lado, si P contiene una referencia a otro
procedimiento llamado Q que a su vez incluye una referencia de forma directa o indirecta a
P entonces se dice que es indirectamente recursivo. Esto indica que el uso de la recursin
puede ser evidente, o no, en el texto de un programa.
En general se asocia un conjunto de objetos locales a un procedimiento, es decir, un
conjunto de variables, constantes, tipos y procedimientos, que definen localmente a este
procedimiento pero que carecen de significado fuera de l. Cada vez que el procedimiento
se activa de forma recursiva se crea un nuevo conjunto de variables locales acotadas.
Aunque llevan el mismo nombre que sus elementos correspondientes en el conjunto local
del caso anterior del procedimiento, sus valores son especficos y se evita cualquier
conflicto en la imposicin de nombre por medio de las reglas de cobertura de los
identificadores, ya que stos siempre se refieren al conjunto de variables de ms reciente
creacin. La misma regla es aplicada para los parmetros de procedimiento.
Al igual que las proposiciones repetitivas, los procedimientos recursivos tienen la
posibilidad de llevar a cabo clculos con ciclos infinitos; es por eso que hay que tener
presente el proceso de la finalizacin. Para dichos procedimientos, un requisito
fundamental es que las llamadas recursivas de P estn sujetas a una condicin B que en un
8
P IF B THEN P S , P END
P P S , IF B THEN P END
En las repeticiones, la tcnica bsica para demostrar la terminacin consiste en:
f (x)
ITERATIVO:
int Factorial( int n )
{ int i, res=1;
for(i=1; i<=n; i++ )
res = res*i;
return(res);
RECURSIVO:
int Factorial( int n ) {
if(n==0) return(1);
return(n*Factorial(n-1));
6 http://en.wikipedia.org/wiki/Tower_of_Hanoi
10
/* Solucion:
1- Mover n-1 discos de A a B
2- Mover 1 disco 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 a %c", n, inicial, final );
Hanoi(n-1, aux, inicial, final );
}
}
1.5Tipos de recursin
Los algoritmos recursivos pueden ser simples o mltiples, as como anidados o cruzados. A
continuacin se dan las definiciones y algunos ejemplos.
8 http://es.wikipedia.org/wiki/Funci%C3%B3n_de_Ackermann
12
Recursividad cruzada o indirecta: Son algoritmos donde una funcin provoca una
llamada a s misma de forma indirecta, a travs de otras funciones.
13
L ai ai 1 a j
Entrada: La lista
PASO 0: Si
de
nmeros naturales.
L1
L2
k i j / 2
PASO 3: Mezclar las listas ordenadas en el PASO 2. Hallar la lista MEZCLA (L1,
L2).
Este algoritmo divide la lista de entrada, siempre que sea posible, en dos listas de
L1 y L2 ,
aproximadamente igual tamao,
y resuelve a continuacin el mismo problema de
L1 y L2
partida por separado para las listas
y mezcla las soluciones parciales obtenidas.
Observacin 1: Este algoritmo se llama a si mismo; es decir, en alguno de sus pasos se da
la instruccin de aplicar el mismo algoritmo a un conjunto ms pequeo contenido en el
conjunto de entrada.
Observacin 2: Este algoritmo recursivo divide sucesivas veces el conjunto de entrada en
partes iguales facilitando as la solucin del problema en dichas partes por ser ms
pequeas; y mezclando as las soluciones parciales de manera sucesiva se obtiene la
solucin general del problema.
A esta tcnica algortmica se le conoce como divide y vencers.
Aplicacin:
Se aplica el algoritmo MEZCLAS a la lista de nmeros {2, 5, 1, 9, 4, 6, 3, 8}, donde se
observa que se divide la lista a la mitad sucesivamente hasta que en el paso 3, una vez
ordenados los nmeros, se inicia la mezcla de las listas.
Entrada:
L 2, 5, 1, 9, 4, 6, 3, 8
14
PASO 1:
PASO 2:
L1 2, 5, 1, 9 , L2 4, 6, 3, 8
L1 :
L1 2, 5 , L2 1, 9
PASO 1:
PASO 2:
L1 :
PASO 1:
PASO 2:
L1 2 , L2 5
L1 2 , L2 5
L 2, 5
PASO 3:
L2 :
PASO 1:
PASO 2:
PASO 1:
PASO 2:
L1 1 , L2 9
L1 1 , L2 9
L 1, 9
PASO 3:
L 1, 2, 5, 9
PASO 3:
L2 :
L1 4, 6 , L2 3, 8
L1 :
PASO 1:
PASO 2:
L2 :
PASO 1:
PASO 2:
PASO 3:
PASO3:
L 3, 4, 6, 8
L1 4 , L2 6
L1 4 , L2 6
L 4, 6
PASO 3:
PASO 3:
k = [(1+8)/2] = [4.5] = 4
L1 3 , L2 8
L1 3 , L2 8
L 3, 8
L 1, 2, 3, 4, 5, 6, 8, 9
Salida: La lista
15
16