Cuando somos niños nos enseñan que lo definido no puede estar en la definición. Por ejemplo, si la maestra en turno nos pide que definamos una mesa, no podemos decir: "una mesa es una mesa", porque precisamente, usamos lo definido en la definición. Probablemente cualquier maestro de primaria se molestaría si mencionásemos el aforismo de Gertrude Stein: "Una rosa es una rosa es una rosa es una rosa" (https://es.wikipedia.org/wiki/Rosa_es_una_rosa_es_una_rosa_es_una_rosa). Y esa que lo definido puede estar en la definición. Por ejemplo, en matemáticas tenemos las funciones recursivas. Una de ellas define, por ejemplo el factorial en dos pasos: una condición terminal y la parte que se recurre a sí misma, la función recursiva:
0! = 1
n!= n * (n-1)!
Si calculamos el factorial de forma recursiva, tendremos que
3! = 3 * 2!
pero no podemos resolver la ecuación porque no sabemos cuánto es 2! Entonces, aplicamos la misma función y hallamos que
2! = 2 * 1!
De nuevo, no sabemos cuánto es 1! y aplicamos la función:
1! = 1 * 0!
Y de nuevo, requerimos calcular 0! Pero por la definición, sabemos que 0! = 1, por lo que ya tenemos ese valor y podemos regresar y calcular los valores temporales de lo que antes no teníamos el resultado.
En el caso de la función iterativa, básicamente 3! = 3 * 2 * 1 = 6.
Niklaus Wirth -dicen- puso un comentario en su compilador de Pascal, que decía: "iteratum humanum est, recursivitum divinum est". Y aunque el científico suizo siempre ha negado ser el autor de dicha frase, rechazando incluso que la hubiese escrito en el código fuente de su compilador, es claro que la frase tiene sentido. Es mucho más elegante matemáticamente la función recursiva que la iterativa.
Se sabe que toda función recursiva puede expresarse de forma iterativa. El problema con las funciones recursivas es que requieren de más recursos (sobre todo en las computadoras), para resolver los problemas planteados. Por ejemplo, en el caso de la función factorial recursiva, hay que llevar una estructura de datos llamada stack, que permite ir metiendo los datos no resueltos temporalmente en una estructura llamada LIFO (last In, First Out), es decir, el primero que metemos es el último que sacamos. Por ejemplo, imaginemos una caja con libros, sellada en la parte inferior. Si empiezo a poner libros, el último libro apilado en dicha caja es el primero que puedo sacar y el primer libro que metí es el último que puedo sacar. En cambio, las funciones iterativas no requieren de guardar resultados intermedios. En ese sentido son directas.
Si vamos a la Naturaleza, al mundo real, tenemos que Mandelbrot armó toda una nueva teoría (en su momento), una geometría que llamó fractal, donde hay una autosimilitud en diversos fenómenos que vemos en nuestro mundo. Por ejemplo, un árbol se compone de un tronco y ramas, que a su vez son "pequeños árboles" los cuales, también tienen ramas más pequeñas. Los árboles tienen una estructura fractal en donde a diferentes escalas se ve la similitud.
Y este es un ejemplo del fenómeno de la recursión. El árbol se recurre a sí mismo para crear árboles más pequeños. Hay otros ejemplos increíbles, como el romanescu. Jamás había visto semejante vegetal en los supermercados y cuando lo vi, lo compré sin dudarlo. Es impresionante porque es en realidad una imagen tridimensional de un fractal. Este es uno de los ejemplos más llamativos de que la Naturaleza, sí, con N mayúscula, está seriamente involucrada con los fractales, descubiertos, o inventados (¿?) por Mandelbrot. El romanescu es una estructura cónica con protuberancias también cónicas más pequeñas que se forman a su vez de otras estructuras cónicas, y así sucesivamente. Esto se entiende con el término “autosimilitud”.
Pero probablemente donde la recursión quede en manifiesto es en la reproducción de los seres vivos. Cuando se fecunda un óvulo humano, por ejemplo, empieza un proceso de creación de un nuevo ser, definido por el ADN directamente. Esta morfogenesis es un misterio realmente. ¿En qué momento el ADN decide que ya estuvo bien de replicarse para empezar a hacer células específicas para músculos, corazón, cerebro, etcétera, no está nada claro. Los biólogos han estudiado estos mecanismos y parece ser que la Naturaleza hace una especie de "switcheo de genes", el cual apaga o prende algunos de estos genes para continuar con el desarrollo del nuevo ser. Parece que la sustancia responsable de esto es la cromatina. Hay muchos estudios que indican que este es el mecanismo para que los genes se enciendan o se apaguen para así, generar un tipo de células o dejar de generar algún otro. Sin embargo, no sé de estudios que indiquen por qué, en un momento determinado, se produce este switcheo de genes.
Aquí les hablaré de lo que creo que en realidad pasa. Primero, ¿Por qué la Naturaleza es recursiva? ¿Por qué -si se necesitan más recursos- la Naturaleza impone el modelo recursivo sobre el iterativo? Mi respuesta es que en el modelo recursivo, está encapsulada toda la información que se necesita. En el modelo iterativo requerimos de un valor externo para que la función se ejecute. Y más de uno podría pensar que eso también pasa en las funciones recursivas, y sí, pero solamente para las matemáticas. En el caso de la reproducción no es necesaria información adicional externa para que la recursividad ocurra.
¿Pero por qué no se requiere información externa? Mi respuesta es esta: no hay necesidad de información externa para empezar un proceso, porque éste funciona hasta que ocurre un umbral. Veamos con el ejemplo del árbol lo que quiero decir: Supongamos que armamos un árbol empezando por su tronco. Este, eventualmente disminuye su grosor y nacen ramas, las cuales a su vez, son como pequeños árboles. Si tomásemos fotos de las ramas, pero acercándonos lo suficiente a las mismas, no podríamos saber si se trata de un tronco o de una rama. He aquí la autosimilitud. Y una vez más, esas ramas puedne generar subramas más pequeñas, autosimilares a las primeras, pero a diferente escala. ¿Y cuándo avaba este proceso? Fácil: cuando no hay suficiente material para crear ramas cada vez más pequeñas. Llega un momento que no hay forma que se creen nuevas ramas. Ese es el umbral del que hablo.
Entonces, para ilustrar la idea. Supongamos que tenemos una función muy compleja, la cual crea un nuevo ser. No requiere de información externa y si requiriese, se puede dar cualquier valor y empezar el proceso, porque la Naturaleza guiará dicho proceso hasta que ocurra un umbral. Más allá de eso no se pueden generar más células, o más ramas, o más subtroncos, etcétera. Y entonces, el switcheo de genes a lo mejor se da cuando se llega al umbral. Con esto podríamos entender la fase temporal del ADN para encender o apagar genes. Es muy sencillo onceptualmente: cuando se llega a un umbral, se detiene ese proceso y probablemente se inicia otro diferente.
Déjenme ilustrarlo con este ejemplo trivial: imaginemos que tenemos mucha hambre y nos sentamos a comer. Podemos comer abundantemente pero de pronto, nuestro cuerpo nos dirá que ya está satisfecho. Ya habremos llegado a un umbral y entonces pasamos a otra fase, a otro proceso, el de hacer la digestión y dejar de seguir comiendo. En este sentido, el sitcheo de comer a no comer no es una cuestión de "timing", sino de llegar a un umbral. Y cuando se llega a éste, se detiene ese proceso y posiblemente se inicia otro.
Estas explicaciones son, en mi opinión, la razón por la cual la Naturaleza prefiere la recursión como mecanismo de repetición de algún proceso. Y es que ese proceso recursivo tiene siempre una condición terminal, que es el umbral, que es la que decide que se cierra el proceso que se está realizando. Por ello, en la recursión todo está encapsulado. Y si hablamos de biología, en la reproducción de los seres vivos, se producen estos umbrales contínuamente hasta que se crea un nuevo ser completo.
¿Opiniones y argumentos? Los leo.