Observe o algoritmo a seguir, que utiliza o conceito de fun...

Próximas questões
Com base no mesmo assunto
Ano: 2014 Banca: FUNCAB Órgão: MDA Prova: FUNCAB - 2014 - MDA - Analista de Negócios |
Q499288 Algoritmos e Estrutura de Dados
Observe o algoritmo a seguir, que utiliza o conceito de função recursiva.

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:
Alternativas

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:

  1. FF(5): N = 1, retorna 5 * FF(4)
  2. FF(4): N = 2, retorna 4 * FF(3)
  3. FF(3): N = 3, retorna 3 * FF(2)
  4. FF(2): N = 4, retorna 2 * FF(1)
  5. FF(1): N = 5, retorna 1 (porque Y < 2)
  6. Substituindo de volta: FF(2) = 2 * 1 = 2
  7. FF(3) = 3 * 2 = 6
  8. FF(4) = 4 * 6 = 24
  9. 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