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).