Considere o seguinte trecho de código escrito em linguagem ...
Considere o seguinte trecho de código escrito em linguagem Java.
static int calc(int k) {
if(k== 2) {
return k;
} else {
return calc(k – 1) + 1;
}
}
Qual é o valor da execução de calc(4)?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C - 4
Para entender a questão, é necessário conhecer os conceitos de recursividade e de condicionais na linguagem de programação Java. A recursividade acontece quando uma função chama a si mesma dentro de sua definição. Aqui, a função calc
chama a si mesma para calcular um valor baseado na entrada k
.
O trecho de código define uma função recursiva chamada calc
que recebe um inteiro k
como argumento. A função possui uma condição base que verifica se k
é igual a 2. Se essa condição for verdadeira, ela retorna o próprio valor de k
. Caso contrário, a função se chama novamente com o valor de k – 1
e adiciona 1 ao resultado dessa chamada recursiva.
Para encontrar o valor de calc(4)
, vamos seguir a execução passo a passo:
- O valor inicial é
k = 4
. - Já que
k
não é igual a 2, a função chamacalc(3)
e espera para adicionar 1 ao resultado. - Na chamada de
calc(3)
,k
ainda não é 2, então chamacalc(2)
e espera para adicionar 1 ao resultado. - Agora, com a chamada de
calc(2)
, a condição base é atendida, e a função retorna 2. - Voltando à chamada de
calc(3)
, ela adiciona 1 ao resultado decalc(2)
, que é 2, e retorna 3. - Finalmente, de volta à chamada original de
calc(4)
, ela adiciona 1 ao resultado decalc(3)
, que é 3, e retorna 4.
Portanto, seguindo a lógica recursiva, calc(4)
retorna 4, o que torna a alternativa C a resposta correta.
Este tipo de questão avalia a habilidade do candidato em entender a execução de funções recursivas, o que é uma competência importante para muitas lógicas e algoritmos usados em programação.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
A idéia principal da recursividade é que você só poderá resolver tudo quando o ultimo for resolvido então valos lá:
Primeiro loop 1+ (4-1)
segundo loop 1+(3-1)
terceiro loop 1+(2) Nesse momento a função não é mais chamada e agora a função começa a resolver
Agora a função vem agindo de baixo para cima
Primeiro loop 1+ (4-1) 1+4 = 5 retorna 5
segundo loop 1+(3-1) 1+3 = 4 retorna 4
terceiro loop 1+(2) 1+2 = 3 retorna 3
pq o terceiro loop retorna 1+(2) ?
sendo que ele entra no if e retorna k, nas minhas contas ficaria
1º loop _ +1 (4-1)
2º loop _ + 1 (3-1)
3º loop retorno 2
if(k== 2) return k;
2º loop 2+1
1º loop 3+1
== 4 // esse seria o resultado
rodem o cód aqui que vai dar 4 tbm
https://www.tutorialspoint.com/compile_java_online.php
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
System.out.println("saida final " + calc(4));
}
static int calc(int k) {
if(k == 2) {
System.out.println(k);
return k;
} else {
System.out.println(k);
return calc(k - 1) + 1;
}
}
}
SAÍDA
Hello World
4
3
2
saida final 4
calc(4) = calc(3) + 1;
calc(3) = calc(2) + 1;
calc(2) = 2.
Quem não tem acesso: - -> C
c-
calc(4) cai na 2° condicao:
(4-1)+1
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo