SóProvas


ID
2656714
Banca
CS-UFG
Órgão
UFG
Ano
2018
Provas
Disciplina
Programação
Assuntos

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
Comentários
  • 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