085 112 Capitulo 6 RECURRENCIA
085 112 Capitulo 6 RECURRENCIA
085 112 Capitulo 6 RECURRENCIA
RECURSIVIDAD (RECURRENCIA)
El concepto de recursividad.
La palabra “recursividad” no aparece en el diccionario de la Real
Academia. Al menos en su 22º edición del año 2001. Tampoco aparece
en el Diccionario de María Moliner.
Quizá todos nos hemos planteado alguna vez una imagen recursiva: una
fotografía que muestra a una persona que sostiene entre sus manos esa
fotografía, que muestra a esa persona que sostiene entre sus manos esa
fotografía, que muestra a esa persona que sostiene entre sus manos esa
fotografía, que muestra…
86
Capítulo 6. Recursividad (Recurrencia)
87
Fundamentos de informática. Codificación y Algoritmia.
Y así tenemos que para calcular una fila del triángulo de Tartaglia no es
necesario acudir al cálculo de binomios ni de factoriales, y basta con
conocer la fila anterior, que se calcula si se conoce la fila anterior, que
se calcula si se conoce la fila anterior… hasta llegar a las dos primeras
filas, que están formadas todo por valores uno. Tenemos, por tanto, y
de nuevo, un camino recurrente hecho a base de simples sumas para
88
Capítulo 6. Recursividad (Recurrencia)
89
Fundamentos de informática. Codificación y Algoritmia.
90
Capítulo 6. Recursividad (Recurrencia)
Nivel de
Recursión 𝑁 devuelve recibe resultado
1 5 5 * Factorial(4) 24 120
2 4 4 * Factorial(3) 6 24
3 3 3 * Factorial(2) 2 6
4 2 2 * Factorial(1) 1 2
5 1 1 * Factorial(0) 1 1
6 0 1 - 1
91
Fundamentos de informática. Codificación y Algoritmia.
2𝑗 = 2𝑛+1 − 1
𝑗 =0
0 𝑗
a) Es cierto para 𝑛 = 0: 𝑗 =0 2 = 20 = 1 = 21 − 1.
𝑘 𝑗
b) Supongamos que es cierto para un determinado valor 𝑘 : 𝑗 =0 2 =
𝑘+1
2 − 1.
cqd.
92
Capítulo 6. Recursividad (Recurrencia)
93
Fundamentos de informática. Codificación y Algoritmia.
Todo lo visto en este apartado del capítulo nos permitirá tener unas
pautas para la construcción de algoritmos o programas recursivos o
recurrentes.
Una vez tenemos las relaciones de recurrencia, hay que transcribir esas
relaciones a notación algorítmica.
94
Capítulo 6. Recursividad (Recurrencia)
0 1 2 … n-1 n n+1 …
95
Fundamentos de informática. Codificación y Algoritmia.
d) Una vez visto como se describe la función y cuáles son los casos más
elementales, queda descubrir cómo describir el caso general. Para
ello debemos basarnos en los desplazamientos elementales.
Estudiamos tres adoquines consecutivos: para alcanzar el adoquín 𝑛
se puede provenir del adoquín 𝑛 – 1, o bien del adoquín 𝑛 – 2.
n2 n 1 n
Podemos, por tanto, afirmar que los caminos que llegan desde 0
hasta 𝑛 son: 𝐶𝑎𝑚𝑖𝑛𝑜𝑠 𝑛 = 𝐶𝑎𝑚𝑖𝑛𝑜𝑠 𝑛 − 1 + 𝐶𝑎𝑚𝑖𝑛𝑜𝑠(𝑛 − 2).
𝐶𝑎𝑚𝑖𝑛𝑜𝑠 1 = 1.
𝐶𝑎𝑚𝑖𝑛𝑜𝑠(2) = 2.
96
Capítulo 6. Recursividad (Recurrencia)
97
Fundamentos de informática. Codificación y Algoritmia.
Árbol de recursión.
Un árbol de recursión sirve para representar las sucesivas llamadas
recursivas que un programa recursivo puede generar. Es un concepto
98
Capítulo 6. Recursividad (Recurrencia)
𝑁−1
𝑁−2
99
Fundamentos de informática. Codificación y Algoritmia.
4 3
3 2 2 1
Recursión e iteración.
El concepto de iteración ya quedó visto en el capítulo 4, al hablar de los
algoritmos y de sus modos de representación. Y al inicio de éste capítulo
hemos visto que todos los algoritmos que en el capítulo 4 resolvimos
mediante la iteración, también pueden ser solventados mediante la
recursividad o recurrencia.
100
Capítulo 6. Recursividad (Recurrencia)
Acciones:
1. Si 𝑁 = 0 Entonces 𝐹𝑎𝑐𝑡𝑜𝑟𝑖𝑎𝑙𝑅 0 ← 1.
2. Sino, Entonces 𝐹𝑎𝑐𝑡𝑜𝑟𝑖𝑎𝑙𝑅 𝑁 ← 𝑁 · 𝐹𝑎𝑐𝑡𝑜𝑟𝑖𝑎𝑙𝑅(𝑁 − 1).
3. FIN.
101
Fundamentos de informática. Codificación y Algoritmia.
∅
Acciones:
1. Si 𝑁 ≤ 2 Entonces 𝐹𝑖𝑏𝑜𝑛𝑎𝑐𝑐𝑖𝑅(𝑁) ← 1.
Si no, Entonces,
𝐹𝑖𝑏𝑜𝑛𝑎𝑐𝑐𝑖𝑅 𝑁 ← 𝐹𝑖𝑏𝑜𝑛𝑎𝑐𝑐𝑖𝑅 𝑁 − 1 + 𝐹𝑖𝑏𝑜𝑛𝑎𝑐𝑐𝑖𝑅(𝑁 − 2).
2. Fin.
102
Capítulo 6. Recursividad (Recurrencia)
103
Fundamentos de informática. Codificación y Algoritmia.
104
Capítulo 6. Recursividad (Recurrencia)
Podemos definir una función que muestre por pantalla los movimientos
necesarios para hacer el traslado de la torre de un poste a otro. A esa
función la llamaremos 𝐻𝑎𝑛𝑜𝑖, y recibe como parámetros los siguientes
valores:
a) una variable entera que indica el disco más pequeño de la pila que
se quiere trasladar.
b) una variable entera que indica el disco más grande de la pila que se
desea trasladar. (Hay que tener en cuenta que con el algoritmo que
hemos definido siempre se trasladan discos de tamaños
consecutivos.)
c) Una variable que indique el poste donde están los discos que
trasladamos.
105
Fundamentos de informática. Codificación y Algoritmia.
𝑖 𝑗 6– 𝑖– 𝑗
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
106
Capítulo 6. Recursividad (Recurrencia)
107
Fundamentos de informática. Codificación y Algoritmia.
Donde la clase Teclado está definida para dar entrada valores desde el
teclado.
Recapitulación.
Hemos visto el modelo recursivo para plantear y solventar problemas.
Esta forma de trabajo es especialmente útil cuando pretendemos
solventar cuestiones basadas en propiedades definidas sobre el conjunto
de enteros o un conjunto numerable donde se pueda establecer una
correspondencia entre los enteros y los elementos de ese conjunto.
108
Capítulo 6. Recursividad (Recurrencia)
Ejercicios.
Definir la operación potencia de forma recursiva. Escribir el
pseudocódigo de una función que pudiera realizar ese cálculo.
109
Fundamentos de informática. Codificación y Algoritmia.
110
Capítulo 6. Recursividad (Recurrencia)
return x > y ? x: y;
}
Para encontrar este proceso es sencillo buscar los casos más sencillos,
que forman la Base de la recurrencia: El código binario de 0 10 es 0; el
código binario de 1 10 es 1.
111
Fundamentos de informática. Codificación y Algoritmia.
Variables
∅
Acciones:
1. Si 𝑛 = 1 Entonces [Mostrar dígito] Mostrar 𝑛.
Si no [Es decir, 𝑛 > 1] Entonces
1.1. 𝐵𝑖𝑛𝑎𝑟𝑖𝑜(𝑛 2).
1.2. [Mostrar digito] Mostrar 𝑛 𝑚𝑜𝑑 2.
2. Fin.
112