Questão nº 38

Questão de Tecnologia da Informação · CESGRANRIO BASA 02/2021 (nº 38)

CESGRANRIO2021Técnico Científico - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Cver comentário ↓

Em linguagens de programação como Java, onde existem estruturas de repetição, a recursão pode ser muitas vezes subs-
tituída pela repetição, com ganhos de desempenho.

Considere a seguinte função recursiva `segredo`, em Java:

```java
public static int segredo(int a) {
if (a<2) {
return 0;
} else {
return segredo(a-2)+1;
}
}
```

Que fragmento de código, em Java, contendo uma estrutura de repetição, é adequado para substituí-la?

Resposta comentada

Gabarito Alternativa C

Conceito-chave: A recursão segredo(a) conta quantas vezes dá para subtrair 2 de a até o valor ficar menor que 2. O loop equivalente precisa repetir exatamente essa mesma contagem, parando quando o valor atual for menor que 2.

  • (A) Incorreta: O loop for (int i=a; i>2; i--) conta de a até 3, mas subtrai 1 a cada passo, não 2. Para a=5, retorna 3, mas segredo(5) retorna 2 (5→3→1). A condição i>2 também erra para a=2, que deveria retornar 0, mas aqui retorna 0 por acaso, e para a=3 retorna 1, quando deveria retornar 0.
  • (B) Incorreta: A condição i<2 && i>0 faz o loop rodar apenas para i=1, mas o valor inicial i=a nunca é menor que 2 se a≥2, então o loop nem executa. Para a=1, executa uma vez e retorna 1, mas segredo(1) retorna 0. A lógica de subtrair 1 (não 2) também está errada.
  • (C) Correta: O while (a>=2) executa exatamente enquanto o valor atual de a for maior ou igual a 2, subtrai 2 e incrementa s. Isso replica perfeitamente a recursão: para a=5, faz 5→3→1, contando 2; para a=2, faz 2→0, contando 1; para a=1, não executa, retornando 0. É a tradução direta da recursão em cauda para um loop.
  • (D) Incorreta: O do-while executa pelo menos uma vez, mesmo para a=0 ou a=1, subtraindo 2 e incrementando s indevidamente. A condição while (a>0 && a<=2) é contraditória e para a=3, após uma iteração a=1, a condição a<=2 é verdadeira, mas a>0 também, então executa de novo, subtraindo para -1, contando 2, quando o correto seria 1.
  • (E) Incorreta: O do-while também executa pelo menos uma vez, errando para a=0 e a=1. Para a=3, após a primeira iteração a=1, a condição a>0 && a<2 é verdadeira, então executa de novo, subtraindo para -1, contando 2, quando o correto seria 1. A condição a<2 deveria ser a>=2 para parar no momento certo.

Fonte: CESGRANRIO BASA 02/2021 Técnico Científico - Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho