Perguntas com a marcação «tail-recursion»

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.

276
Como faço para sair de um loop no Scala?

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...

121
Como exatamente a recursão da cauda funciona?

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 *...

99
A JVM impede otimizações de chamada final?

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...

8
Quando é garantida a recursão da cauda no Rust?

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...