Buscar

Recursão de Cauda na Programação Funcional

Prévia do material em texto

Questão 10 Sem resposta
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 afirmações 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:
III.
II e III.
II.
I e II.
I.
III.
Sua resposta
I - FALSA - 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. O CORRETO É: Na figura 16(a), A CADA chamada
recursiva, O NÚMERO DE FUNÇÕES aumenta porque o programa só pode calcular o
resultado da ÚLTIMA função chamada, para depois calcular o resultado das que a chamaram.
Assim, a pilha estoura. II - FALSA - 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. O CORRETO É: Na figura 16(b), A CADA PASSO, A
QUANTIDADE de chamadas nem aumenta nem diminui. A partir do momento que a função
recursiva é chamada, APENAS ELA é chamada no final, sem precisar de mais cálculos. III -
VERDADEIRA - 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.
Prova
final
Algoritmos e Programação
Estruturada: Programação
Estruturada para Dev
Acertos 9 de 10
Nota 45 pontos
 Corretas Erradas
1 2 3 4 5
6 7 8 9 10
Anterior Concluir correção
Correção da prova
Tamanho da fonte Falar com o tutor

Mais conteúdos dessa disciplina