Vengo da un background di fisica e, quindi, da molta matematica. Trovo facile individuare i problemi adatti alle soluzioni di programmazione ricorsive / dinamiche trovando similitudini con proof by induction .
In prova per induzione hai due parti:
- provi che se qualcosa è vero per l'iterazione N, è anche vero per l'iterazione N + 1
- si dimostra che è vero per l'iterazione 1
In programmazione ricorsiva / programmazione dinamica:
- si identifica una condizione di uscita (ad esempio, si collega la soluzione per l'iterazione 1)
- si calcola la soluzione per l'iterazione N data la soluzione per l'iterazione N-1
Quindi, come hanno risposto gli altri, è una questione di esperienza e di raccolta dei suggerimenti, ma puoi riutilizzare altre abilità per guidarti. Dopodiché, devi sempre avere le due parti che ho menzionato: se non lo fai, non funzionerà.
Ad esempio, per generare tutte le permutazioni di un set:
- condizione di uscita: se hai solo un elemento, restituiscilo
Ricorsione - : le permutazioni di un insieme di elementi N sono le serie N di permutazioni ottenute scegliendo ogni elemento e combinando il con tutti gli insiemi N-1 di (molte) permutazioni del sottoinsieme ottenuto rimuovendo l'elemento.