optimización de la recursión de cola al final es lo que?

Este concepto sabrá cuando la estructura de los datos del estudio, no se ha estudiado.

 

También una función factorial, la primera suele ser la versión familiar más, que es la versión recursiva en general:

 

 

Para func (5) de la llamada recursiva es la siguiente:

 

 

 

 

A continuación, la versión recursiva de cola:

 

 

 gráfico de llamadas de esta manera:

 

 Parece que tanto pila de recursión son cinco Bueno, ¿qué diferencia hace?

La mayor diferencia es: por primera común recursiva, cada vez que la función de n * f (n-1) tendrá que esperar f (n-1) devuelve la llamada, el retorno a hacer la multiplicación. Esto es, hasta que f (n-1) antes de la devolución, el valor de la variable n se debe almacenar en la pila.

Para recursiva de cola, además de la función de los resultados de un parámetro antes de la función de grabación calcula el (algo similar dinámica programación no?). Por lo que la función actual f (n, 1), finalmente a punto de llamada f (n-1, n) cuando la variable dentro de la pila (f (n, 1) funciones de la pila) (por ejemplo, n y cur_mul) ya no tienen que ser guardados a.

El llamado optimización recursión de cola no quiere decir que este enfoque es una optimización de recursión de cola , sino más bien que nuestro código si se utiliza la recursión de cola , entonces el compilador espacio automáticamente pila ya no es necesario en el código para optimizar la distancia, la optimización se refiere a la optimización del compilador que la recursividad código de la cola . Comprender ese momento, si el compilador no lo hacen otras cosas, la diferencia de rendimiento entre nuestro recursiva cola y código recursivo general, menos, son de forma recursiva n capa. Una vez que el compilador reconoce sólo el código de la cola de recursión se recursivas función directamente dentro de la abertura en la pila anterior (sobre todo más complicado, y simplemente la comprensión de los principios de), por lo que se usa cada uno con un espacio de pila recursiva, para evitar la posibilidad de capas de la pila de recursión de alto explosivo. Cuando finalmente regresó directamente a la función más profunda resultar Anterior Volver al comienzo de la llamada de función. (De hecho, se convirtió en un bucle! No recursividad ya!)

 

Dos se conocen, colocada casi respondió:

1. recursión de cola, uno más que el parámetro recursivo lineal, este parámetro es una función del resultado obtenido en la última llamada;
Por lo tanto, el punto clave es que cada cola de llamadas recursivas se incluyen en la colección, para evitar los resultados de la recaudación no sólo recurrencia lineal Ampliar desventajas de consumo de memoria.

¿Cuál es la cola-recursividad? - La respuesta de Frankie Young - saber casi https://www.zhihu.com/question/20761771/answer/57214778

 
2. A medida que la llamada recursiva de cola se produce al final de la función, su propio marco de pila, no tengo nada que tiene que ser utilizado, y se puede hacer la siguiente llamada recursiva de las comprendidas en el marco de pila actual.
Tal resultado se debe a la recursión de cola optimizado, llamada / ret realmente eliminado (ya que el marco de pila actual directamente, y no necesita para empujar la pila, la función del mismo puede generalmente en línea), y el código de máquina resultante es ciclo el mismo.
¿Cuál es la cola-recursividad? - Sun realidad respuesta - saber casi https://www.zhihu.com/question/20761771/answer/19144609

Supongo que te gusta

Origin www.cnblogs.com/FdWzy/p/12556145.html
Recomendado
Clasificación