La ricorsione - come tutti sappiamo - è uno di quei problemi - che avvolgere la tua mente è come raggiungere un "traguardo" nel tuo viaggio di programmazione.
Ma quando si tratta di usarlo effettivamente in problemi del mondo reale - conoscere la meccanica della ricorsione NON è sufficiente - bisogna anche capire la natura dei problemi in cui la ricorsione è la soluzione più adatta.
Quindi la mia domanda è questa ...
- quali sono i "modelli di problemi" che richiedono la soluzione di ricorsione
- è la ricorsione una forma di strategia "divide & conquer" o una forma di "riuso del codice" - oppure, è un modello di progettazione a sé stante
- puoi darci un esempio di un problema del mondo reale in cui la ricorsione viene in mente come soluzione immediata
- UPDATE -
molte risposte si riferiscono a "problemi reali" come attraversamento di alberi, fattoriali, ecc. Preferirei "i veri problemi reali" - lasciatemi fare un esempio ...
Abbiamo avuto un GRANDE pezzo di testo (circa 30 MB di testo come elenco collegato di structs
), e avevamo bisogno di fare un indice per la ricerca full-text. Avevamo bisogno di mantenere l'intero indice nella memoria e ri-indicizzare il testo ogni 10 minuti.
Ogni 10 minuti confrontiamo l'intero testo (due elenchi collegati, riga per riga) con un blocco di testo appena generato - per vedere quale riga è stata cambiata - e quindi reindicizziamo solo quella riga - - In questo modo potremmo evitare di dover ri-indicizzare il testo INTERO. Ricorda: dovevamo trovare i punti diff tra due liste collegate da 30 MB.
Uno dei miei colleghi ha inventato un fantastico programma che utilizzava la ricorsione HEAVY per confrontare le linee - e poi raccoglieva le posizioni in cui i mandrini differivano in un array - sì, so che può sembrare sconcertante - come potrebbe la ricorsione aiutare qui - ma lo ha fatto.
Il punto è: come potrebbe vedere che questo problema potrebbe essere risolto in modo intelligente con un uso intensivo della ricorsione?