¿Cuáles son los mejores libros para aprender a programar usando la recursión?

¿Por qué?

Cualquier libro de LISP puede ser? No soy un programador funcional, pero recuerdo que en el clásico lisp siempre usamos construcciones recursivas para operar en listas, es simplemente la forma natural de LISP.

También hay tareas que son naturalmente solucionables con recursión. Como la Torre de Hanoi, la generación de todas las permutaciones (o muchas otras tareas combinatorias constructivas u otras tareas de búsqueda de fuerza bruta), elevar un número a un poder entero, el divisor común más grande, recorridos de árboles, búsqueda en profundidad y tareas relacionadas en gráficos generales … Si quieres aprender mejor la recursión, intenta resolverlos. Incluso puede hacerlo al estilo ACM, encontrar problemas apropiados y enviar soluciones en su lenguaje de programación favorito a uno de los sistemas de jueces en línea (UVa, Timus, etc.).

Y como observación, quiero mencionar que la recursión podría no ser la mejor manera de codificar algo en las aplicaciones de producción, porque no tiene control manual de la pila que podría desbordarse … Cualquier programa recursivo podría reescribirse sin el uso de la recursión.

No obstante, encuentro el concepto de recursión muy útil por las siguientes razones. 1. Ayuda a entender cómo se ejecutan los programas (pila, paso de parámetros). 2. El concepto de reducción de una tarea a subtareas es un concepto clave en la programación dinámica. 3. Los programas recursivos suelen ser fáciles de escribir.

Por lo que sé, estos son los únicos cuatro libros que se centran exclusivamente en la programación recursiva:

  • Introducción a la programación recursiva, M. Rubio-Sánchez (Taylor y Francis, 2017) [En Python]
  • Practicando la recursión en Java, I. Pevac (CreateSpace Independent Publishing Platform, 2016)
  • Pensando recursivamente con Java, ES Roberts (Wiley, 2006) [También una edición anterior en Pascal]
  • Recursión a través de Pascal, JS Rohl (Cambridge University Press, 1984)

Recomendaría altamente cómo diseñar programas y estructurar e interpretar programas de computadora. Esos son ambos enlaces de lectura libre.

Ok, no leo mucho, pero voy a remontarme un poco a lo que dijo Vladislav y te recomendaré un idioma.

De la misma forma que no podría o al menos no querría, aprender la programación en su forma más pura, le recomiendo que estudie un lenguaje de programación en su lugar.

Personalmente, solo he tomado unas pocas semanas de cursos en SML, un lenguaje de programación estrictamente inmutable (hasta donde sé) y funcional. Una vez más, a mi entender, no existe el tiempo o para los bucles en este lenguaje, por lo que si desea hacer algo, DEBE utilizar la recursión.

Así que básicamente los libros sobre SML es lo que puedo recomendar:
Página en cmu.edu
Introducción a la programación utilizando SML (International Computer Science Series): Michael Hansen, Hans Rischel:

El primero es bastante técnico y seco (IMO), pero la mayoría de los libros son para mí, por lo que podría ser parcial.