SóProvas


ID
1757152
Banca
FCC
Órgão
TRE-PB
Ano
2015
Provas
Disciplina
Programação
Assuntos

Considere o código Java abaixo.

public class Prova {
      public static void main(String[] args) {
      System.out.print ("O resultado da operação é " + calcular(5));
      }
      public static int calcular(int n) {
             if (n == 0) return 1;
            ..I....
     }
}

Após compilar e executar a classe, para que seja calculado o fatorial de n, a lacuna I deverá ser preenchida por return:

Alternativas
Comentários
  • a) vai retonar 5*4 -> 20

     

    b) não existe esse método https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

     

    c) Vai executar infinitamente até estourar a pilha. Exception in thread "main" java.lang.StackOverflowError

                     1ª vez, recebe 5 e chama o calcular com 5*4

                     2ª vez, recebe 20 e chama o calcular com 20*19

                     3ª vez, recebe 380 e chama o calcular com 380-379 e por aí vai sem nunca parar, pois o n não ficará igual que 0

     

    d) não existe esse método https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

     

    e) CORRETA. retorna N vezes o calcular (N-1) e irá terminar quando o (n==0) -> 5*4*3*2*1 -> 120

  • Estamos diante de um problema de fatorial de número. O fatorial é o número multiplicado pelo seus antecedentes até o número 1. Veja:

    fat (2) = 2 * 1 = 2

    fat (3) = 3 * 2 * 1 = 6

    fat (4) = 4 * 3 * 2 * 1 = 24

    Note que fat (4) pode ser escrito assim:

    fat (4) = 4 * fat (3)

    = 4 * [3*2*1]

    E devemos considerar que o fatorial de 0 é 1. Essa será a condição trivial, de parada da nossa função recursiva. Logo faremos uma função recursiva da seguinte maneira:

     

    n * calcular(n - 1); // a cada chamada diminui o valor de n até chegar a condição de parada

    GABARITO: E