Hola, ¿PodrÃas explicar más lo de la eficiencia?
-
Con respecto a la memoria: Yo entiendo que en cada llamada de la función se apila en memoria el contexto de la llamada es decir, variables locales, operandos temporales de expresiones (El caso del primer factorial), etc; pero en la segunda versión que hiciste en vez de usar un operando temporal usas un parámetro (que al final en el contexto de la función ocupa lo mismo que una variable local o un operando temporal).
-
Con respecto al tiempo de ejecución, no importa si la multiplicación se realiza en cada llamada o al final de todas, ya que las llamadas de funciones siempre tienen que retornar desde dónde fueron llamadas.
Tal vez Scala optimiza esto, y eso no lo sé, me podrÃas dar algún otro ejemplo de Tail Recursion por favor.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?