2011-02-09 19 views
5

¿Es la recursividad de cola mejor que la recursión hacia adelante para el rendimiento en erlang?
¿O el compilador de erlang optimiza la recursión hacia adelante también?
Es decir, ¿hay alguna razón para utilizar la recursividad de cola en lugar de la recursión directa?
En mi opinión, la recursión hacia adelante se ve más bonita.Recursividad de cola frente a recursión hacia adelante en Erlang

Respuesta

3

La recursividad de cola suele ser mejor porque utiliza menos memoria. Solo traes lo que necesitas a la próxima llamada, lo que minimiza la utilización de la memoria en la pila. Además, cuando se optimiza el código recursivo de la cola, se descartan los retornos de función que no son necesarios, lo que lo hará un poco más rápido en algunos casos.

Por ejemplo, si el valor de retorno de una función es la llamada a otra función, no es necesario mantener la función intermediaria en la pila. Entonces el código salta directamente a la persona que llama desde la función interna.

La recursividad sin cola está optimizada para la recursión final en algunos casos por el compilador de Erlang, pero no cuente con ella. Haga un buen hábito para codificar las funciones recursivas de la cola cada vez que pueda.

10

La recursividad de la cola y la recursión directa son conceptos totalmente diferentes. Vea esto discussion.

Es posible escribir una recursión hacia adelante que es recursiva de cola y, por lo tanto, optimizada. También es posible escribir una recursión hacia adelante que no sea recursiva de cola: en este caso, no se optimizará, es decir, consumirá espacio de pila.

Cuestiones relacionadas