Buscar

Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha usando 'recursão de cauda'. A diferença entre recursiva nor...

Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha usando 'recursão de cauda'. A diferença entre recursiva normal e de cauda é justamente aonde a chamada recursiva é chamada. Caso seja chamada na 'cauda' da função, é uma chamada de cauda recursiva. A 'cauda' da função é sua última chamada. É a última computação / cálculo feito pela função, e logo depois dela, nenhum tratamento é feito antes de retornar seu valor. Neste contexto, analise as figuras 16(a) e 16(b). Figura 16 – (a) recursão normal e (b) recursão de cauda Considerando as imagens apresentadas julgue as afirmacoes que se seguem. I - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode calcular o resultado da primeira função chamada, para depois calcular o resultado das que a chamaram. Assim, a pilha estoura. II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos. III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por um estouro de pilha. É correto apenas o que se afirma em:

I - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode calcular o resultado da primeira função chamada, para depois calcular o resultado das que a chamaram. Assim, a pilha estoura.
II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos.
III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a transforma em um laço durante as otimizações. Desta forma não perde as vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por um estouro de pilha.
a) III.
b) II e III.
c) II.
d) I e II.
e) I.
f) Nenhuma alternativa assinalada

Essa pergunta também está no material:

p10Ampli
2 pág.

Algoritmos e Programação Pítagoras AmpliPítagoras Ampli

💡 1 Resposta

User badge image

Ed Verified user icon

A resposta correta é a alternativa b) II e III. Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é chamada, todas são chamadas no final, sem precisar de mais cálculos. Além disso, quando um compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a transforma em um laço durante as otimizações. Desta forma, não perde as vantagens, nem a elegância da programação funcional, mas também não corre o risco de passar por um estouro de pilha.

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais