Come decidere come costruire una funzione ricorsiva

0

A volte, quando stai codificando, sei su un problema che può essere risolto con un metodo ricorsivo. Qual è per te il modo migliore per rilevare quando la ricorsione è un buon modo per risolvere un problema e come implementarlo in modo efficiente?

Voglio dire, come lo visualizzi? Come ti convinci che funziona?

    
posta toto 16.08.2016 - 10:18
fonte

2 risposte

3

Non c'è una una risposta a che tu stia meglio con una ricorsione, loop, chiamate con più funzioni, ...

Ma ci sono alcuni suggerimenti:

  • la profondità di ricorsione può essere limitata dalla dimensione dello stack di chiamate (dipende dalla lingua). Un valore che viene visualizzato è un massimo di 1024.

  • se la struttura dati è ricorsiva, ad esempio un albero binario, la ricorsione è il tuo amico.

  • metti il tuo problema in parole: "e poi lo stesso per l'elemento successivo" = > iterazione; "e poi lo stesso per il resto" = > ricorsione.

  • se hai bisogno di memorizzare valori intermedi, è più semplice farlo con l'iterazione.

  • se il tuo problema è intrinsecamente auto-simile, vai con la ricorsione.

Commento finale: tutti i problemi possono essere risolti sia dall'iterazione che dalla ricorsione. È un buon esercizio implementare entrambi. Osserva, che ti ha portato più tempo, che scorre più veloce, che utilizza meno memoria, che è parallelizzabile? E, cosa più importante: quale è stato più divertente da implementare?

    
risposta data 16.08.2016 - 10:49
fonte
-1

Dipende dal problema. ! L'esempio fattoriale è piuttosto artificiale; è così semplice che in realtà non importa quale versione Tu scegli. Molti ADT (ad es., Alberi) sono più semplici e amp; più naturale se i metodi sono implementati in modo ricorsivo. Ricorsivo non è sempre meglio. ! Risolvi un grosso problema suddividendolo in più piccolo e pezzi più piccoli fino a quando non puoi risolverlo; combinare i risultati. La ricorsione è molto meglio dell'iterazione per problemi che possono essere suddivisi in più parti più piccole. Precisamente, il metodo divide et impera che utilizza la ricorsione può ridurre la dimensione del problema ad ogni passo e richiederebbe meno tempo di un approccio iterativo ingenuo. La ricorsione è più semplice da implementare e di solito è più "elegante" di soluzioni iterative.

    
risposta data 18.08.2016 - 10:50
fonte

Leggi altre domande sui tag