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!
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