Observe o algoritmo a seguir, que utiliza o conceito de fun...
algoritmo "MDA"
var
X, W, N : inteiro
funcao FF(Y:inteiro):inteiro
inicio
N <- N + 1|
se Y < 2 entao
retorne 1
senao
retorne Y * FF(Y-1)
fimse
fimfuncao
inicio
X <-5
N <-0
W <- FF(X)
W <-W-50
escreval(W,N)
fimalgoritmo
Após a execução, o algoritmo, os valores de W e N serão, respectivamente:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: D - 70 e 5.
Vamos entender por que a alternativa D é a correta, assim como as razões pelas quais as outras alternativas estão incorretas.
Tema da questão: A questão aborda o conceito de função recursiva. Funções recursivas são aquelas que chamam a si mesmas durante a execução. Entender como elas funcionam e a sequência de chamadas é crucial para resolver a questão.
Explicação do Algoritmo: Vamos analisar o algoritmo passo a passo.
A função FF(Y) é definida da seguinte maneira:
- Incrementa a variável N em 1.
- Se Y é menor que 2, retorna 1.
- Caso contrário, retorna Y multiplicado pelo resultado de FF(Y-1).
O algoritmo principal começa definindo X como 5 e N como 0. Depois, ele calcula o valor de W chamando FF(X) e, em seguida, ajusta W subtraindo 50. Finalmente, imprime os valores de W e N.
Cálculo detalhado:
- FF(5): N = 1, retorna 5 * FF(4)
- FF(4): N = 2, retorna 4 * FF(3)
- FF(3): N = 3, retorna 3 * FF(2)
- FF(2): N = 4, retorna 2 * FF(1)
- FF(1): N = 5, retorna 1 (porque Y < 2)
- Substituindo de volta: FF(2) = 2 * 1 = 2
- FF(3) = 3 * 2 = 6
- FF(4) = 4 * 6 = 24
- FF(5) = 5 * 24 = 120
Assim, W é inicialmente 120. Depois, ajustamos W subtraindo 50, resultando em W = 70.
Durante essas operações, a variável N é incrementada 5 vezes, uma para cada chamada recursiva, totalizando N = 5.
Justificativa das alternativas:
- A - 120 e 5: Incorreta porque W deve ser ajustada subtraindo 50, resultando em 70, não 120.
- B - 120 e 1: Incorreta tanto no valor de W quanto em N. O valor de N deve ser 5, não 1.
- C - 70 e 0: Incorreta porque N é incrementado 5 vezes, não 0.
- D - 70 e 5: Correta, pois após todos os cálculos, W é 70 e N é 5.
- E - 70 e 1: Incorreta, pois N deve ser 5, não 1.
Espero que esta explicação tenha ajudado a entender a lógica do algoritmo e a razão pela qual a alternativa D é a correta. Se tiver dúvidas adicionais, sinta-se à vontade para perguntar!
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 questão trata de recursividade por meio da chamada Y * FF(Y-1).
Inicialmente temos as variáveis X = 5 e N = 0. A função FF atua de forma recursiva, com condição de parada quando o argumento (parâmetro) for menor que 2.
A primeira chamada à função FF ocorre com argumento 5. Segue todas as iterações para a variável Y:
- 5: Y * FF (Y - 1) => 5 * F(4)
- 4: Y * FF (Y - 1) => 4 * F(3)
- 3: Y * FF (Y - 1) => 3 * F(2)
- 2: Y * FF (Y - 1) => 2 * F(1)
- 1: Condição de parada, retornando 1. Com isso, basta substutuir nas chamadas anteriores: 2 * 1 = 2 / 3 * 2 = 6 / 4 * 6 = 24 / 24 * 5 = 120 (variável W). Note que cada chamada à função FF ocasiona o incremento à variável N. Como 5 chamadas foram feitas e a variável N inicialmente é 0, então temos que, ao final, N = 5. Antes da impressão das variáveis, o valor de W é subtraído em 50, passando a ter como resultado 70. Com isso, W = 70 e N = 5.
Bons estudos!
resumindo pro povo da cola, a resposta é 70 e 5
Força Guerreiro!!!!!!
public class teste {
private static final int x = 5;
private static int n = 0;
public static void main (String args[]) {
int w = funcao(x);
w -= 50;
System.out.println(w + " " + n);
}
public static int funcao(int x) {
n += 1;
if ( x < 2 ) {
return 1;
} else {
return x * funcao(x - 1);
}
}
}
Código feito em Java
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo