La recursividad es un concepto fundamental en matemticas y en
computacin; pues es una alternativa diferente para implementar estructuras de repeticin (ciclos). Los mdulos se hacen llamadas recursivas. Se puede usar en toda situacin en la cual la solucin pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas. En programacin, un mtodo usual de simplificacin de un problema complejo es la divisin de este en sub-problemas del mismo tipo. Esta tcnica de programacin se conoce como divide y vencers y es el ncleo en el diseo de numerosos algoritmos de gran importancia, as como tambin es parte fundamental de la programacin dinmica. El ejemplo del clculo recursivo factorial de un nmero llevado al campo de la programacin, en este ejemplo C++:
El seguimiento de la recursividad programada es casi exactamente igual al ejemplo antes dado, para intentar ayudar a que se entienda mejor se ha acompaado con muchas explicaciones y con colores que diferencian los distintos sub-procesos de la recursividad.
int factorial(int x) { if (x > -1 && x < 2) return 1; // Cuando -1 < x < 2 devolvemos 1 puesto que 0! = 1 y 1! = 1 else if (x < 0) return 0; // Error no existe factorial de nmeros negativos return x * factorial(x - 1); // Si x >= 2 devolvemos el producto de x por el factorial de x - 1 }
Creacin de las funciones: factorial de un nmero mediante la recursividad en CLIPS La recursividad en CLIPS es una forma de resolver problemas. Si se analiza un problema, y se descubre que se puede resolver por partes en las que se vuelve a plantear el problema original pero de forma ms "reducida", entonces se puede resolver por recursin. El ejemplo tpico es la funcin factorial: El factorial de 6 se representa: 6! y es igual a 6 x 5 x 4 x3 x 2 x 1. Por lo tanto 6! = 720. Si nos fijamos un poco podemos ver que el factorial de 5 es igual a 5 x 4 x 3 x 2 x 1. Por lo tanto el factorial de 6 es igual a 6 x el factorial de 5. Y el factorial de 5 es igual a 5 x el factorial de 4, etctera. Por convenio en matemticas el factorial de 0 es igual a 1. X = 3 //Queremos 3!, por lo tanto X inicial es 3 X >= 2 -> return 3*factorial(2); X = 2 //Ahora estamos solicitando el factorial de 2 X >= 2 -> return 2*factorial(1); X = 1 // Ahora estamos solicitando el factorial de 1 X < 2 -> return 1; [En este punto tenemos el factorial de 1 por lo que volvemos marcha atrs resolviendo todos los resultados] return 2 [es decir: return 2*1 = return 2*factorial(1)] return 6 [es decir: return 3*2 = return 3*factorial(2)*factorial(1)] // El resultado devuelto es 6
Vemos que podemos usar la funcin factorial al intentar calcular el factorial de un nmero. Funcin factorial recursiva:
Explicacin de la funcin: El factorial de un nmero n es: 1. Si n = 0 entonces el factorial es 1. 2. Si n no es 0, entonces el factorial es n x factorial(n-1). Avisos: La funcin (1- n) devuelve el nmero n menos 1. Existe la funcin (1+ n) que devuelve el nmero n ms 1.
(defun factorial (n) (if (zerop n) 1 (* n (factorial (1- n))) ) ) La sucesin de Fibonacci La sucesin de Fibonacci es la sucesin de nmeros:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, ... Cada nmero se calcula sumando los dos anteriores a l. El 2 se calcula sumando (1+1) Anlogamente, el 3 es slo (1+2), Y el 5 es (2+3), y sigue! Ejemplo: el siguiente nmero en la sucesin de arriba sera (21+34) = 55 Aqu tienes una lista ms larga: La regla La sucesin de Fibonacci se puede escribir como una "regla" (lee sucesiones y series): La regla es xn = xn-1 + xn-2 Dnde: xn es el trmino en posicin "n" xn-1 es el trmino anterior (n-1) xn-2 es el anterior a ese (n-2) Por ejemplo el sexto trmino se calculara as: x6 = x6-1 + x6-2 = x5 + x4 = 5 + 3 = 8
La sucesin fue descrita por Fibonacci como la solucin a un problema de la cra de conejos: Cierto hombre tena una pareja de conejos juntos en un lugar cerrado y uno desea saber cuntos son creados a partir de este par en un ao cuando en su naturaleza parir otro par en un simple mes, y en el segundo mes los nacidos parir tambin. Numero de mes Explicacin de la genealoga Parejas de conejos totales Comienzo del mes 1 Nace una pareja de conejos (pareja A). 1 pareja en total Fin del mes 1 La pareja A tiene un mes de edad. Se cruza la pareja A. 1+0=1 pareja en total Fin del mes 2 La pareja A da luz a la pareja B. Se vuelve a cruzar la pareja A. 1+1=2 parejas en total Fin del mes 3 La pareja A, da a luz a la pareja C. La pareja B cumple un 1 mes. Se cruzan las parejas A y B. 2+1=3 parejas en total Fin del mes 4 Las parejas A y B dan a luz a D y E. La pareja C cumple 1 mes. Se cruzan las parejas A, B y C. 3+2=5 parejas en total Fin del mes 5 A, B y C dan a luz F, G y H. D y E cumplen 1 mes. Se cruzan A, B, C, D y E 5+3=8 parejas en total Fin del mes 6 A, B, C, D y E dan a luz a I, J, K, L y M; F, G y H cumplen 1 mes. Se cruzan A, B, C, D, E, F, G y H. 8+5=13 parejas en total