Pular para o conteúdo principal

Questão de Programação — Geral — CESPE / CEBRASPE 2025

ProgramaçãoGeral
Código
ce217117
Banca
CESPE / CEBRASPE
Órgão
TJ-PA
Ano
2025
Nível
Superior
Cargo
Analista Judiciário - Especialidade: Análise de Sistemas
Julgue o item subsequente, referente a Python e Java.Imagem associada para resolução da questãoO código Java precedente, ao ser executado, apresentará o resultado a seguir.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Java: recursão e rastreamento de chamadas

Gabarito: letra E (ERRADO). O código Java apresentado define um método recursivo fun que, para fun(3), retorna 5, e não 6 como afirma o item. A execução correta da recursão é: fun(3) = 3 + fun(2) = 3 + 2 = 5, pois fun(2) = 2 + fun(1) = 2 + 0 = 2 e fun(1) retorna 0 (caso base). O erro do item está em afirmar que o resultado é 6, quando o rastreamento correto da recursão demonstra que o valor retornado é 5.

A recursão é uma técnica de programação em que uma função chama a si mesma para resolver um problema, dividindo-o em subproblemas menores e mais simples. No código em questão, o método fun recebe um parâmetro inteiro y e verifica se y é maior que 1. Se for, ele retorna y + fun(y - 1), ou seja, soma o valor atual com o resultado da chamada recursiva com o argumento decrementado. Caso contrário, quando y não é maior que 1 (ou seja, y <= 1), a função retorna 0, encerrando a recursão. Esse caso base é fundamental para evitar que a recursão continue indefinidamente, causando um estouro de pilha.

Para entender o resultado, é essencial rastrear a execução passo a passo. Quando chamamos fun(3), a função verifica que 3 é maior que 1, então calcula 3 + fun(2). Para resolver fun(2), ela verifica que 2 é maior que 1, então calcula 2 + fun(1). Para resolver fun(1), ela verifica que 1 não é maior que 1, então retorna 0. Agora, com o retorno de fun(1) = 0, podemos calcular fun(2) = 2 + 0 = 2. Com o retorno de fun(2) = 2, podemos calcular fun(3) = 3 + 2 = 5. Portanto, o resultado final é 5, e não 6.

A pegadinha desta questão está na contagem incorreta das somas. O candidato pode ser tentado a somar 3 + 2 + 1 = 6, mas isso ignora o caso base, que retorna 0 para fun(1), e não 1. A recursão não soma os valores de 1 até 3; ela soma o valor atual com o resultado da chamada recursiva, e o caso base retorna 0. Assim, a soma correta é 3 + 2 + 0 = 5. É fundamental identificar corretamente o caso base e o passo recursivo para rastrear a execução com precisão.

Guarde o critério decisivo: para resolver questões de recursão, identifique o caso base (quando a função para) e o passo recursivo (como a função se chama), e então rastreie a execução de trás para frente, substituindo cada chamada pelo seu retorno. É exatamente nesse rastreamento que a alternativa se decide.

Item — ❌ ERRADO

O item afirma que o código Java, ao ser executado, apresentará o resultado 6. Isso está incorreto. O rastreamento correto da recursão mostra que fun(3) retorna 5, conforme demonstrado:

  • fun(3) → 3 > 1, então 3 + fun(2)

  • fun(2) → 2 > 1, então 2 + fun(1)

  • fun(1) → 1 não é > 1, então retorna 0 (caso base)

  • fun(2) = 2 + 0 = 2

  • fun(3) = 3 + 2 = 5

O erro do item está em afirmar que o resultado é 6, quando o correto é 5. A confusão provavelmente surge de uma soma incorreta (3 + 2 + 1 = 6), ignorando que o caso base retorna 0, e não 1. Portanto, o item está ERRADO.

Gabarito: letra E (ERRADO).

Link permanente: /questoes/ce217117