Al comenzar a aprender lisp, me he encontrado con el término recursivo de cola . ¿Qué significa
La recursividad de cola es una estrategia recursiva en la que una función realiza una cierta cantidad de trabajo y luego se invoca a sí misma. La "cola" se refiere al hecho de que la recursividad está al final de la función. Muchos compiladores de lenguajes de programación, especialmente funcionales, pueden convertir este tipo de llamadas en iteraciones, lo que significa que la recursividad de cola en los lenguajes compatibles se puede utilizar sin temor a un desbordamiento de la pila, independientemente del número de llamadas.
Al comenzar a aprender lisp, me he encontrado con el término recursivo de cola . ¿Qué significa
Muy simple, ¿qué es la optimización de llamadas de cola? Más específicamente, ¿cuáles son algunos pequeños fragmentos de código en los que se podría aplicar y, en caso contrario, con una explicación de por
¿Cómo rompo un bucle? var largest=0 for(i<-999 to 1 by -1) { for (j<-i to 1 by -1) { val product=i*j if (largest>product) // I want to break out here else if(product.toString.equals(product.toString.reverse)) largest=largest max product } } ¿Cómo convierto los bucles anidados en...
Tal como está actualmente, esta pregunta no es adecuada para nuestro formato de preguntas y respuestas. Esperamos que las respuestas sean respaldadas por hechos, referencias o experiencia, pero esta pregunta probablemente solicitará debate, argumentos, encuestas o discusión
Tengo el siguiente código que falla con el siguiente error: RuntimeError: profundidad de recursión máxima excedida Intenté reescribir esto para permitir la optimización de recursión de cola (TCO). Creo que este código debería haber tenido éxito si se hubiera producido un TCO. def trisum(n,...
Me parece que funcionaría perfectamente bien para hacer una optimización de recursión de cola tanto en C como en C ++, aunque durante la depuración nunca parece ver una pila de cuadros que indique esta optimización. Eso es bastante bueno, porque la pila me dice cuán profunda es la recursión. Sin...
Casi entiendo cómo funciona la recursividad de cola y la diferencia entre ella y una recursividad normal. Yo solamente no entiendo por qué no se requiere pila de recordar su dirección de retorno. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n -...
Encontré esta pregunta sobre qué idiomas optimizan la recursividad de la cola. ¿Por qué C # no optimiza la recursividad de cola, siempre que sea posible? Para un caso concreto, ¿por qué este método no está optimizado en un bucle ( Visual Studio 2008 de 32 bits, si eso importa) ?: private static...
Vi esta cita sobre la pregunta: ¿Cuál es un buen lenguaje funcional sobre el que construir un servicio web? Scala, en particular, no admite la eliminación de llamadas finales, excepto en funciones auto-recursivas, lo que limita los tipos de composición que puede hacer (esta es una limitación...
Los lenguajes funcionales llevan al uso de la recursividad para resolver muchos problemas y, por lo tanto, muchos de ellos realizan Tail Call Optimization (TCO). El TCO hace que las llamadas a una función desde otra función (o ella misma, en cuyo caso esta característica también se conoce como...
Tengo un algoritmo de búsqueda de ruta recursiva de cola que he implementado en JavaScript y me gustaría saber si alguno (¿todos?) Los navegadores posiblemente obtendrían excepciones de desbordamiento de pila.
Descubrí el comando "time" en Unix hoy y pensé en usarlo para verificar la diferencia en tiempos de ejecución entre funciones recursivas normales y recursivas de cola en Haskell. Escribí las siguientes funciones: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac'...
Aquí hay un fragmento de código de la documentación para fs2 . La función goes recursiva. La pregunta es ¿cómo sabemos si es seguro para la pila y cómo razonar si alguna función es segura para la pila? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O],...
Lenguaje C En el lenguaje de programación C, es fácil tener una recursión de cola : int foo(...) { return foo(...); } Simplemente regrese como es el valor de retorno de la llamada recursiva. Es especialmente importante cuando esta recursión puede repetirse mil o incluso un millón de veces....