La recursividad de la cola es funcionalmente equivalente a un simple ciclo while.
Pruébelo usted mismo: tome una función recursiva de cola y escriba un bucle while equivalente.
Los compiladores inteligentes lo saben y crearán un código similar para el bucle while y la implementación recursiva de cola, evitando así la pila de funciones normal.
- Mis ubicaciones están por venir, así que he estado implementando estructuras de datos y algoritmos en Python, pero llegué a saber que muchas empresas no tienen Python instalado en sus estaciones de trabajo. ¿Es verdad? Y si es así, ¿estaría bien cambiar de Python a Java, que no recuerdo mucho?
- ¿Qué es el algoritmo round-robin?
- ¿Cuál es el mejor factor de contracción para un tipo de peine? ¿Por qué?
- ¿Cuántos tipos de algoritmos SVM existen?
- ¿Cuál es el mejor enfoque para resolver el problema que CRYPTO preguntó en el concurso de codificación PRAVEGA 2014 celebrado en Codechef el 9 de noviembre?
Para las funciones recursivas que no utilizan la recursividad de cola, tiene alguna expresión compleja con algunos otros términos. Y necesita almacenamiento adicional para los resultados parciales de esos otros términos cada vez que realiza la llamada recursiva, es decir, necesita una pila que crece cada vez que entra en la recursividad.
Por supuesto, siempre puede poner esta pila en un argumento adicional (a menudo llamado acumulador) y, por lo tanto, obtener una función recursiva de cola, pero en este caso no gana nada ya que la pila todavía está allí; ahora está explícitamente administrada por usted, en lugar de compilador.
En algunos casos, creo que si el operador calculado por la expresión compleja es asociativo y tiene un elemento neutral, también puede hacerlo sin una pila. En esos casos tienes mucha suerte.