Questão nº 30
Questão de Desenvolvimento de Sistemas · FCC TRT15 2023 (nº 30)
Um Analista fez um programa Java que permite ao usuário informar o número de anos de serviço de um funcionário e, em seguida, calcula a quantidade total de dias de férias acumuladas com base nas regras estabelecidas: 15 dias de férias para funcionários com até 5 anos de serviço e 15 dias adicionais para cada novo período de até 5 anos.
```java
import java.util.Scanner;
public class Ferias {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Informe o número de anos de serviço: ");
int anosServico = scanner.nextInt();
int diasFerias = calcular(anosServico);
System.out.println("Dias de férias acumuladas: " + diasFerias);
}
public static int calcular(int anosServico) {
if (anosServico <= 5)
return 15;
else {
}
}
}
```
Para que o programa execute corretamente na forma descrita, no interior do bloco `else` do método `calcular` deve ser colocada a instrução
- A`return calcular(anosServico - 5);`
- B`return 15 + calcular(anosServico - 15);`
- C`return 15 + (anosServico - 5);`
- D`return 15 + calcular(anosServico - 5);` (alternativa correta)
- E`return anosServico + 15;`
Resposta comentada
Gabarito Alternativa D
Recursão é uma técnica de programação onde uma função resolve um problema chamando a si mesma com uma versão menor do mesmo problema, até chegar a um caso base que pode ser resolvido diretamente.
- (A) Incorreta:
return calcular(anosServico - 5);Esta instrução apenas calcula as férias para os anos restantes, esquecendo de adicionar os 15 dias referentes ao período de 5 anos que está sendo processado na chamada atual. - (B) Incorreta:
return 15 + calcular(anosServico - 15);A subtraçãoanosServico - 15está incorreta. A regra é reduzir 5 anos para cada período de 15 dias de férias, não 15 anos. Isso levaria a resultados errados e chamadas com anos negativos rapidamente. - (C) Incorreta:
return 15 + (anosServico - 5);Esta não é uma chamada recursiva. Ela tenta resolver o problema de forma linear, somando 15 dias e depois os anos restantes, mas não aplica a regra de "15 dias adicionais para cada novo período de até 5 anos" de forma recursiva. Por exemplo, para 6 anos, retornaria15 + (6 - 5) = 16, quando o correto é 30. Esta é uma armadilha comum para quem não compreende a necessidade de aplicar a regra repetidamente aos anos restantes. - (D) Correta:
return 15 + calcular(anosServico - 5);Esta instrução implementa corretamente a lógica recursiva. Ela adiciona os 15 dias de férias correspondentes ao período atual (os primeiros 5 anos ou o bloco de 5 anos que está sendo avaliado) e, em seguida, chama a funçãocalcularnovamente para determinar as férias dosanosServico - 5restantes, aplicando a mesma regra até atingir o caso base (anosServico <= 5). - (E) Incorreta:
return anosServico + 15;Esta não é uma chamada recursiva e não segue a regra de "15 dias para cada período de até 5 anos". Ela simplesmente soma 15 aos anos de serviço, o que não corresponde ao cálculo desejado.
Fonte: FCC TRT15 2023 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 002). Reproduzida para fins de estudo.