SóProvas


ID
1497871
Banca
FUNCAB
Órgão
MDA
Ano
2014
Provas
Disciplina
Algoritmos e Estrutura de Dados
Assuntos

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
Comentários
  • 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