<< día 13 | Inicio | día 14 >>
Si consideramos la siguiente función matemática
$f(x) = \left { \begin{matrix} f(0) = 0\ f(x) = 2f(x-1) + x^2\end{matrix}\right.$
Para calcular
Antes de resolver esta expresión es necesario resolver $f(4)$ , es decir:
Ahora es necesario resolver
Y lo mismo ocurre con
Y con
Cuando se presenta el caso
Ahora que se conoce que
En matemáticas, existen numerosas funciones que tienen el carácter recursivo. En la vida ordinario ocurre en numerosas situaciones, por lo que en la programación a este proceso también se le conoce como recursividad (recursión).
La recursividad es el proceso que realiza una función al llamarse así misma un número de veces para realizar una operación. Dicho de otra manera, una función recursiva es una función que se llama así misma y ejecuta la misma instrucción repetidamente.
Ejemplo de recursividad
El fundamento de la recursividad se define en dos principios o casos:
El caso base es aquel donde el valor de la función es conocido directamente sin la necesidad de aplicar la recursividad
El caso progresivo es el caso que se resuelve de manera recursiva, este caso se dice que es progresivo porque siempre debe conducir a alcanzar el caso base.
Ejemplo
Ejemplo de una función matemática que suma los primeros
Como punto de partida se puede afirmar que
La definición de la función suma
El algoritmo que resuelve el problema de la suma de los primeros enteros de forma iterativa, utiliza un simple bucle for:
ALGORITHM: SUM (n)
SET sum = 0
FOR I = 1 to n
sum = sum + I
RETURN sum
END ALGORITHM
El algoritmo que calcula la suma mediante un proceso iterativo debe considerar una condición de parada. Así, en el caso recursivo de $S(6)$ se define cómo:
En resumen el algoritmo que calcula la suma debe considerar:
$S(n) = \left { \begin{matrix} 1 \text{, si }n = 1\ n + S(n-1) \text{, si } n> 1\end{matrix}\right.$
La implementación de un algoritmo recursivo para realizar la suma de los primeros números enteros:
ALGORITHM: SUM (n)
IF n = 1 THEN
RETURN 1
ELSE
RETURN n + SUM(n-1)
END ALGORITHM
Ejemplo sobre el cálculo del factorial de un número entero.
El factorial de un número entero positivo es denotado por
Por ejemplo:
Ejemplo de factorial solución iterativa:
ALGORITHM: FACTORIAL (n)
SET result = 1
FOR I = 2 to n
result = result * I
RETURN result
END ALGORITHM
Ejemplo de factorial solución recursiva:
ALGORITHM: FACTORIAL (n)
IF n = 0 OR n = 1 THEN
RETURN 1
ELSE
RETURN n * FACTORIAL(n-1)
END IF
END ALGORITHM
Las cuatro reglas básicas para el diseño de una función recursiva:
- Caso base, de acuerdo a los fundamentos de la recursividad, el caso base es aquel que no requiere de ningún cálculo para conocer el resultado de la llamada de la función.
- Caso recursivo, como se explico anteriormente se debe detectar aquel caso que es repetitivo y que se resuelve con una llamada de la función así misma, siempre cuando este orientado en alcanzar el caso base.
- Regla de diseño, se asume que todas las llamadas recursivas se resuelven de manera contabilizada.
- Regla del interés compuesto es importante asegurarse de no duplicar la resolución de la misma instancia de un problema en llamadas recursivas separadas.
Ejemplo sobre el cálculo de la serie Fibonacci.
En la serie Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, … se observa que la serie comienza con 0 y 1, y tiene la propiedad de que cada elemento es la usa de dos elementos anteriores, por ejemplo:
Entonces se puede establecer que:
…
La definición recursiva será:
La implementación iterativa de la serie Fibonacci sería:
ALGORITHM: FIBONACCI (n)
IF n = 0 OR n = 1
RETURN n
SET fibonacci_lower = 0
SET fibonacci_upper = 1
FOR I = 2 to n
x = fibonacci_lower
fibonacci_lower = fibonacci_upper
fibonacci_upper = x + fibonacci_lower
RETURN fibonacci_upper
END ALGORITHM
La implementación recursiva es:
ALGORITHM: FIBONACCI (n)
IF n = 0 OR n = 1
RETURN n
ELSE
RETURN FIBONACCI(n-1) + FIBONACCI(n-2)
END ALGORITHM
La formulación recursiva puede resultar ineficiente si se repiten los cálculos realizados anteriormente.
Supongamos que
Recursividad directa, es aquella donde la función
En la recursividad indirecta la función
Ejemplo, escribir una aplicación para mostrar en pantalla el alfabeto, utilizando recursión indirecta.
ALGORITHM: FUNCA (c)
IF c > ‘A’
FUNCIONB(c)
PRINT(c)
END ALGORITHM
ALGORITHM: FUNCB(c)
FUNCIONB(c - 1)
END ALGORITHM