2011-02-09 15 views
5

La ricorsione della coda è migliore della ricorsione in avanti per la perfomance in erlang?
Oppure il compilatore di erlang ottimizza anche la ricorsione in avanti?
Voglio dire, ci sono dei motivi per usare la ricorsione in coda invece della ricorsione in avanti?
A mio parere, la ricorsione in avanti sembra più carina.Ricorsione della coda e ricorsione diretta in Erlang

risposta

3

La ricorsione della coda è solitamente migliore perché utilizza meno memoria. Porta solo ciò di cui hai bisogno alla prossima chiamata, il che minimizza l'utilizzo della memoria nello stack. Inoltre, quando il codice ricorsivo della coda è ottimizzato, i ritorni di funzione che non sono necessari vengono gettati via, il che lo renderà leggermente più veloce in alcuni casi.

Ad esempio, se il valore di ritorno di una funzione è la chiamata a un'altra funzione, non è necessario mantenere la funzione intermedia in pila. Quindi il codice torna direttamente al chiamante dalla funzione interna.

La ricorsione non a coda è ottimizzata per la ricorsione in coda in alcuni casi dal compilatore Erlang, ma non contare su di essa. Prendi una buona abitudine per codificare le funzioni ricorsive della coda ogni volta che puoi.

10

La ricorsione della coda e la ricorsione in avanti sono concetti completamente diversi. Vedere questo discussion.

È possibile scrivere una ricorsione in avanti che è ricorsiva della coda e quindi ottimizzata. È anche possibile scrivere una ricorsione in avanti che non sia ricorsiva in coda: in questo caso, non sarà ottimizzata, cioè consumerà spazio nello stack.

Problemi correlati