Enquanto começava a aprender cocô, me deparei com o termo recursivo da cauda . O que isso significa
A recursão de cauda é uma estratégia recursiva na qual uma função realiza algum trabalho e, em seguida, invoca a si mesma. A "cauda" refere-se ao fato de que a recursão está no final da função. Muitos compiladores de linguagens de programação - especialmente funcionais - podem transformar esses tipos de chamadas em iterações, o que significa que a recursão final em linguagens suportadas pode ser usada sem medo de estouro de pilha, independentemente do número de chamadas.
Enquanto começava a aprender cocô, me deparei com o termo recursivo da cauda . O que isso significa
Muito simplesmente, o que é otimização de chamada de cauda? Mais especificamente, quais são alguns pequenos trechos de código onde eles podem ser aplicados e onde não, com uma explicação do
Como faço para quebrar um loop? 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 } } Como transformar aninhados...
Atualmente, essa questão não se encaixa no nosso formato de perguntas e respostas. Esperamos que as respostas sejam apoiadas por fatos, referências ou conhecimentos, mas essa pergunta provavelmente solicitará debates, argumentos, pesquisas ou discussões prolongadas. Se você acha...
Eu tenho o seguinte pedaço de código que falha com o seguinte erro: RuntimeError: profundidade máxima de recursão excedida Tentei reescrever isso para permitir a otimização da recursão de cauda (TCO). Acredito que esse código teria sido bem-sucedido se um TCO tivesse ocorrido. def trisum(n,...
Parece-me que funcionaria perfeitamente bem na otimização da recursão de cauda em C e C ++, mas durante a depuração, nunca pareço ver uma pilha de quadros que indica essa otimização. Isso é bom, porque a pilha me diz o quão profunda é a recursão. No entanto, a otimização também seria...
Eu quase entendo como a recursão da cauda funciona e a diferença entre ela e uma recursão normal. I única não entendo por que ele não requer pilha para lembrar o seu endereço de retorno. // tail recursion int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc *...
Eu encontrei esta pergunta sobre quais linguagens otimizam a recursão da cauda. Por que o C # não otimiza a recursão da cauda, sempre que possível? Para um caso concreto, por que este método não é otimizado em um loop ( Visual Studio 2008 de 32 bits, se for o caso) ?: private static void...
Eu vi esta citação sobre a pergunta: Qual é uma boa linguagem funcional para construir um serviço da web? Scala, em particular, não oferece suporte à eliminação de chamadas finais, exceto em funções autorrecursivas, o que limita os tipos de composição que você pode fazer (esta é uma limitação...
Linguagens funcionais levam ao uso de recursão para resolver muitos problemas e, portanto, muitas delas realizam Tail Call Optimization (TCO). O TCO faz com que chamadas para uma função de outra função (ou de si mesmo; nesse caso, esse recurso também é conhecido como Eliminação de Recursão de...
Eu tenho um algoritmo de pathfinding recursivo que implementei em JavaScript e gostaria de saber se algum (todos?) Navegadores possivelmente obteriam exceções de estouro de pilha.
Eu descobri o comando "time" no Unix hoje e pensei em usá-lo para verificar a diferença nos tempos de execução entre funções recursivas de cauda e recursivas normais em Haskell. Eu escrevi as seguintes funções: --tail recursive fac :: (Integral a) => a -> a fac x = fac' x 1 where fac' 1...
Aqui está um pedaço de código da documentação para fs2 . A função goé recursiva. A questão é: como sabemos se a pilha é segura e como raciocinar se alguma função é segura? import fs2._ // import fs2._ def tk[F[_],O](n: Long): Pipe[F,O,O] = { def go(s: Stream[F,O], n: Long): Pull[F,O,Unit] = {...
Linguagem C Na linguagem de programação C, é fácil ter recursão de cauda : int foo(...) { return foo(...); } Apenas retorne como é o valor de retorno da chamada recursiva. É especialmente importante quando essa recursão pode se repetir mil ou até um milhão de vezes. Usaria muita memória na...