La ricorsione - come tutti sappiamo - è uno di quei problemi - che avvolgere la testa sembra come raggiungere una "pietra miliare" nel tuo viaggio di programmazione.
Ma quando si tratta di usarlo effettivamente nei problemi del mondo reale - conoscere la meccanica della ricorsione NON è abbastanza - 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 problema" che richiedono la soluzione della ricorsione?
- la ricorsione è una forma di strategia di "divisione e conquista" o una forma di "riutilizzo 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 una soluzione immediata
-- AGGIORNARE --
molte risposte si riferiscono a "problemi reali" come attraversamento di alberi, fattoriali, ecc. Preferirei "i veri problemi reali" - lascia che ti dia un esempio ...
Avevamo un GRANDE blocco di testo (circa 30 MB di testo come un elenco collegato di structs
) e dovevamo crearne un indice per la ricerca di testo completo. Dovevamo mantenere l'intero indice in memoria e reindicizzare il testo ogni 10 minuti.
Ogni 10 minuti confronteremmo l'intero testo (due elenchi collegati, riga per riga) con un pezzo di testo appena generato - per vedere quale riga è stata modificata - e quindi indicizzeremmo solo quella riga - in quel modo potremmo evitare di dover reindicizzare il testo INTERO. Ricorda: dovevamo trovare i punti diff tra due elenchi collegati da 30 MB.
Uno dei miei colleghi ha escogitato un fantastico programma che ha usato la ricorsione HEAVY per confrontare le linee - e quindi raccogliere le posizioni in cui i mandrini differivano in un array - sì, lo so che sembra sconcertante - come potrebbe essere utile la ricorsione qui - ma lo ha fatto.
Il punto è: come ha potuto vedere che questo problema potrebbe essere risolto in modo intelligente con un uso intenso della ricorsione?