SóProvas


ID
913807
Banca
FCC
Órgão
DPE-SP
Ano
2013
Provas
Disciplina
Programação
Assuntos

As duas classes a seguir resolvem o mesmo problema, porém, a ClasseB utiliza recursão e a ClasseA, não:

 public class ClasseB {
      public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          System.out.print("Entre com o valor de n:");
          int n = in.nextInt();
          for (int i = 1; i <= n; i++) {
               long f = teste(i);
               System.out.println(f);
     }
}
 public static long teste(int n) {
          if (n <= 2) {
          return 1;
          } else {
          return teste(n - 1) + teste(n - 2);
     }
  }
}
 
import java.util.Scanner;
 public class ClasseA {
      public static void main(String[] args) {
          Scanner in = new Scanner(System.in);
          System.out.print("Entre com o valor de n:");
          int n = in.nextInt();
          for (int i = 1; i <= n; i++) {
          long f = teste(i);
          System.out.println(f);
    }
}
 public static long teste(int n) {
          if (n <= 2)
          return 1;
          long a=1;
          long b=1;
          long c = 1;
          for (int i=3; i<=n; i++){
          c=a+b;
          b=a;
          a=c;
    }
          return c;
  }
}


Analisando as duas classes e refletindo sobre o uso de recursão é possível concluir que

Alternativas
Comentários
  •  Uma implementação recursiva precisa registrar o estado atual do processamento de maneira que ela possa continuar de onde parou após a conclusão de cada nova execução subordinada do procedimento recursivo. Esta ação consome tempo e memória.

    http://pt.wikipedia.org/wiki/Recursividade_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)
  • Temos nos 2 casos classes que imprimem os N primeiros números da sequência de Fibonacci (1, 1, 2, 3, 5, 8, 13, ...).

    As alternativas B e D estão obviamente erradas porque não apresentam a sequência correta a ser produzida.

    Resta analisar o desempenho de uma implementação recursiva em relação a uma implementação iterativa. Vide o link do colega Jorge.


  • Detalhe: tomada separadamente, sem o "import java.util.Scanner;", a ClasseB não funciona!

  • Sem identação fica complicado ler esse código... srsr