Considere o seguinte trecho de código escrito em linguagem ...

Próximas questões
Com base no mesmo assunto
Q885569 Programação

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

Alternativas

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:

  1. O valor inicial é k = 4.
  2. Já que k não é igual a 2, a função chama calc(3) e espera para adicionar 1 ao resultado.
  3. Na chamada de calc(3), k ainda não é 2, então chama calc(2) e espera para adicionar 1 ao resultado.
  4. Agora, com a chamada de calc(2), a condição base é atendida, e a função retorna 2.
  5. Voltando à chamada de calc(3), ela adiciona 1 ao resultado de calc(2), que é 2, e retorna 3.
  6. Finalmente, de volta à chamada original de calc(4), ela adiciona 1 ao resultado de calc(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