Vengo de un fondo de física, y por lo tanto, muchas matemáticas. Encuentro problemas fáciles de detectar que se adaptan bien a las soluciones de programación recursiva / dinámica al encontrar similitudes con la prueba por inducción .
En prueba por inducción tiene dos partes:
- demuestras que si algo es cierto para la iteración N, también es cierto para la iteración N + 1
- demuestras que es cierto para la iteración 1
En programación recursiva / programación dinámica:
- identifica una condición de salida (por ejemplo, conecta la solución para la iteración 1)
- calcula la solución para la iteración N dada la solución para la iteración N-1
Entonces, como respondieron otros, es una cuestión de experiencia y de captar las pistas, pero puedes reutilizar otras habilidades para guiarte. Después de eso, debe tener siempre las dos partes que mencioné: si no lo hace, entonces no funcionará.
Por ejemplo, para generar todas las permutaciones de un conjunto:
- condición de salida: si solo tiene un elemento, devuélvalo
- recursividad: las permutaciones de un conjunto de N elementos son los N conjuntos de permutaciones que obtienes al elegir cada elemento y combinarlos con todos los conjuntos N-1 de (muchas) permutaciones del subconjunto que obtienes al eliminar el elemento.