¿Por qué no se nos enseña a pensar “recursivamente” en la resolución de problemas matemáticos desde la escuela primaria?

En realidad lo somos.

Comenzando con una división larga, que es un procedimiento propiamente recursivo. En algún momento, se nos enseña el factorial que es una definición clásica recursiva.

En algún momento durante K-12 también se nos enseña el principio de inducción y las pruebas por inducción, que son el equivalente lógico de la recursividad.

Otros lugares donde es probable que lo encuentres: establece la teoría y las definiciones de cosas como los números naturales.

Entonces, aunque las matemáticas nos enseñan la recursión, desafortunadamente, son las clases de programación las que la arruinan. La recursividad se enseña como un acto antinatural en la mayoría de los cursos de programación para principiantes porque la mayoría de las clases de programación para principiantes se imparten en idiomas imperativos que tienen un apoyo terrible para la recursión y los maestros desalientan activamente su uso.

Otro culpable de esto son los algoritmos y los cursos de estructuras de datos. Estos cursos enseñan el diseño y análisis de algoritmos utilizando modelos de programación imperativos. Esto generalmente lleva a un pensamiento atrofiado. Como resultado, los estudiantes son completamente incapaces de diseñar algoritmos de forma recursiva, y mucho menos implementarlos.

Es solo cuando los estudiantes encuentran idiomas que apoyan la recursividad (Scheme, Lisp, Haskell y similares), que realmente pueden comenzar a apreciar la claridad de pensamiento que ofrece y su poder expresivo. Para muchos estudiantes, sin embargo, generalmente es demasiado tarde.

Si bien hay intentos en los departamentos de CS para cambiar esto, dichos departamentos son, lamentablemente, una minoría.

Sí, se supone que la recursividad pertenece al campo de las matemáticas. Y sí, nos enseñaron la recursión como parte de nuestro plan de estudios de matemáticas, aunque de una manera diferente.

Lo único que faltaba en el plan de estudios entre lo que nos enseñaron y lo que aprendimos durante la programación fue ver la relación entre dos. Y podría haber muchas razones válidas, aunque no intencionadas para esto; uno que seguramente se aplica en mi caso: comencé a aprender Programación mucho después de que dejé de aprender Matemáticas.

Estoy hablando de la ‘Inducción matemática’, literalmente la imagen especular de la recursión.

Definición de Wikipedia de inducción matemática:

La inducción matemática es un método de prueba matemática típicamente utilizado para establecer una declaración dada para todos los números naturales. Es una forma de prueba directa, y se realiza en dos pasos. El primer paso, conocido como el caso base , es probar la declaración dada para el primer número natural. El segundo paso, conocido como el paso inductivo , es demostrar que la declaración dada para cualquier número natural implica la declaración dada para el siguiente número natural. A partir de estos dos pasos, la inducción matemática es la regla a partir de la cual inferimos que la declaración dada se establece para todos los números naturales.

Ahora intente recordar los pasos involucrados mientras escribe un código recursivo:

1. Hay un “caso base” que indica cuándo la recursión para detenerse o salir.
2. Lógica que combina las soluciones de otras llamadas recursivas para formar una solución completa al problema original.

Recuerdo haber estudiado recursiones por primera vez en mi carrera de informática. Al principio fue muy difícil para mí pensar de forma recursiva, sin embargo, una vez que lo entendí, quise aplicarlo en todas partes.

Te das cuenta muy rápidamente de que, aunque es una forma muy elegante de resolver problemas, solo puede usarse para problemas que naturalmente tienen una naturaleza recursiva, como números de Fibonacci, búsqueda binaria, clasificación, listas enlazadas, etc.

Hay problemas que puede identificar fácilmente de forma recursiva, como Fibonacci o exponentes informáticos como mencionó, sin embargo, existen aquellos que son mucho más difíciles de visualizar y ver cómo las recursiones realmente resuelven el problema. El tipo de fusión, por ejemplo, requiere pensar un poco solo para entender por qué funciona y por qué funciona rápidamente.

Entonces, en aras de la practicidad, aunque las recursiones son una forma muy elegante de pensar sobre ciertos problemas, es mucho más fácil enseñar a los niños métodos que pueden usarse con matemáticas de nivel superior como álgebra, geometría, trigonometría o cálculo, muchos de los cuales no tienen muchos problemas que son de naturaleza recursiva.

Se trata de estado.

Si te digo que sumar es contar, solo necesitas hacer un seguimiento de dónde estás en el conteo.

Si, en cambio, le digo que sumar sucesivamente crea un nuevo problema en el que agrega uno menos hasta que solo agrega cero, momento en el que ya ha terminado y puede comenzar a agregar el resultado, eso es un valor de página de contabilidad que incluye contar que termina con … lo has adivinado, contando.

Esa es la misma razón por la que rara vez implementas cosas de forma recursiva. Es un desperdicio por todas las dimensiones.

La recursión crea definiciones elegantes, pero operaciones pésimas.

Las definiciones recursivas en matemáticas simplemente no son tan claras como las declarativas.