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