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,
- o método ack retornará o valor 12 presente na variável ack.
- 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.
- o método ack retornará o valor 0, resultante das diversas chamadas recursivas ao método ack.
- o método ack retornará o valor 5 presente na variável ack.
- 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