La recursión , como todos sabemos, es uno de esos problemas, que envolver la cabeza se siente como lograr un "hito" en su viaje de programación.
Pero cuando se trata de usarlo realmente en problemas del mundo real, conocer la mecánica de la recursión NO es suficiente, también se debe comprender la naturaleza de los problemas en los que la recursión es la solución más adecuada.
Así que mi pregunta es esta...
- ¿Cuáles son los "patrones problemáticos" que requieren la solución de la recursividad?
- es la recurrencia una forma de estrategia de "divide y vencerás" o una forma de "reutilización de código", o es un patrón de diseño en sí mismo
- ¿Puede darnos un ejemplo de un problema del mundo real en el que la recursión viene a la mente como una solución inmediata?
- ACTUALIZACIÓN -
muchas respuestas se refieren a "problemas reales" como el desplazamiento de árboles, factorial, etc. Preferiría "los problemas reales REALES" - déjenme darles un ejemplo ...
Teníamos una GRAN tirada de texto (aproximadamente 30 MB de texto como una lista vinculada de structs), y necesitábamos hacer un índice para la búsqueda de texto completo. Necesitábamos mantener todo el índice en la memoria y volver a indexar el texto cada 10 minutos.
Cada 10 minutos, compararíamos todo el texto (dos listas vinculadas, línea por línea) con un fragmento de texto recién generado, para ver qué línea se cambió, y luego volveríamos a indexar solo esa línea, de esa manera podríamos evitar tener que volver a indexar TODO el texto. Recuerde: necesitábamos encontrar los puntos de diferencia entre dos listas vinculadas de 30 MB.
A uno de mis colegas se le ocurrió un programa fantástico que utilizaba la recursión PESADA para comparar las líneas, y luego recolectaba las posiciones en las que los mandriles diferían en una matriz. Sí, sé que suena desconcertante. lo hizo.
El punto es: ¿cómo podría ver que este problema podría resolverse de manera inteligente con un uso intensivo de la recursividad?