Vantaggio o svantaggi tra funzioni ricorsive e punti for-loop [duplicato]

3

Qual è la differenza tra le due procedure? Quando dovrei usare una funzione ricorsiva invece di un normale ciclo di ripetizione?

    
posta José Valente 05.07.2011 - 21:22
fonte

5 risposte

12

I tuoi "per cicli" sono fondamentalmente funzioni iterative (possono anche essere ricorsivi, ma non altrettanto probabili). Le funzioni iterative sono generalmente più veloci delle loro controparti ricorsive.

A volte una soluzione ricorsiva è molto naturale mentre una soluzione iterativa è molto imbarazzante. Vai con la ricorsione in questi casi.

Infine, se hai uno spazio limitato nello stack, vai con iterazione.

    
risposta data 05.07.2011 - 21:48
fonte
3

Non usare le funzioni ricorsive in cui potresti usare un ciclo semplice, a meno che non sia stato detto in un'intervista (ahh, Fibonacci, come ti amo e ti odio!). Anche allora potresti voler chiedere perché; potresti ottenere punti bonus.

Le funzioni ricorsive sono perfette per le strutture ad albero. I loop sono perfetti per le iterazioni e le sequenze.

public List<string> GetAllFilesInTree(string path)
{
    List<string> files = new List<string>(GetAllFilesInFolder(path));
    foreach (string subdir in GetAllFoldersInFolder(path))
    {
        files.AddRange(GetAllFilesInTree(path));
    }
}
    
risposta data 05.07.2011 - 21:40
fonte
2

Regola del pollice: usa la ricorsione quando riduce lo sforzo di sviluppo (di solito nelle strutture ad albero) e quando le prestazioni non sono un problema.

La ricorsione può essere più facile e veloce da implementare in molti casi, quindi commercialmente ha senso ricorrere alla ricorsione. Nella maggior parte dei casi è possibile scrivere codice con prestazioni migliori che utilizza meno risorse non utilizzando la ricorsione. Il tuo capo probabilmente sceglierà la soluzione di ricorsione se gli dai la scelta: -)

Ricordo qualcosa su una procedura specifica su come convertire un algoritmo ricorsivo in uno non ricorsivo. Ha comportato l'estrazione degli argomenti e la creazione di variabili o array locali. Non riesco a ricordare le specifiche però, ma con un po 'di buon senso dovrebbe essere un lavoro semplice.

    
risposta data 06.07.2011 - 00:39
fonte
1

Le chiamate alle funzioni ricorsive possono risolvere tutti i problemi che i loop possono risolvere e alcuni. La maggior parte dei problemi rientra nella categoria che può essere risolta utilizzando entrambi e, nella maggior parte delle lingue, la soluzione iterativa è più efficiente, quindi è quello che dovresti usare in caso di dubbio.

Indipendentemente, trovare una soluzione iterativa quando conosci già quella ricorsiva, o vv., può essere un buon esercizio e spesso complicato.

    
risposta data 05.07.2011 - 22:27
fonte
-4

Quando la funzione stessa chiama ripetutamente finché non viene soddisfatta una condizione specifica.
Svantaggi:

    La ricorsione
  1. è più lenta in termini di velocità e tempo di esecuzione.
  2. La ricorsione
  3. richiede una quantità extra di sovraccarico di runtime.
risposta data 24.09.2013 - 17:10
fonte

Leggi altre domande sui tag