FC ConcursosFC Concursos

Questão FC373299

Considere o método abaixo, criado em Java: public int ack(int n, int m){ int ack; if(n==0) ack = m + 1; else if (n>0 && m==0) ack = ack(n - 1, m); else ack = ack(n - 1, ack(n, m -

Linguagens de Programação

FCC · 2018

Considere o método abaixo, criado em Java:


public int ack(int n, int m){
    int ack;
    if(n==0)
        ack = m + 1;
    else if (n>0 && m==0)
        ack = ack(n - 1, m);
    else
        ack = ack(n - 1, ack(n, m - 1));
    return ack;
}


Se n receber 1 e m receber 4,

  1. o método ack retornará o valor 12 presente na variável ack.
  2. ocorrerá um erro, pois não é possível usar uma variável no interior do método que tenha o mesmo nome do método.
  3. o método ack retornará o valor 0, resultante das diversas chamadas recursivas ao método ack.
  4. o método ack retornará o valor 5 presente na variável ack.
  5. ocorrerá um erro, pois uma chamada recursiva não pode receber um argumento que inclui outra chamada recursiva.
Mostrar resposta e comentário

Gabarito

D

Comentário do professor

O método tem o caso base n==0, que retorna \(m+1\).

Para ack(1,4) aplica-se o ramo else: ack(1,4) = ack(0, ack(1,3)).

Repete-se o mesmo raciocínio de forma análoga:
ack(1,3) = ack(0, ack(1,2))
ack(1,2) = ack(0, ack(1,1))
ack(1,1) = ack(0, ack(1,0))
ack(1,0) (aqui entra o ramo n>0 && m==0) = ack(0,0) = 0+1 = 1.

Voltando na pilha:
ack(1,1) = ack(0,1) = 2
ack(1,2) = ack(0,2) = 3
ack(1,3) = ack(0,3) = 4
ack(1,4) = ack(0,4) = 5.

Conteúdo do catálogo FC Concursos · Atualizado em

Continue aprendendo