/* Evaluation du temps d'execution              */
/* Calcul de Fib(n) par methode recursive       */
/*  - Fib(0) = 0                                */
/*  - Fib(1) = 1                                */
/*  - Fib(n) = Fib(n-1)+Fib(n-2)                */

public class TempsFibonacci2EnConsole {

//////////////////////////////////////////////////

/* Variable globale de calcul du nombre         */
/* d'appels a la fonction fib                   */

  static long nb;

/* Calcul de Fib(n) par methode recursive       */
/*  - Fib(0) = 0                                */
/*  - Fib(1) = 1                                */
/*  - Fib(n) = Fib(n-1)+Fib(n-2)                */

  static long fib(int n) {
    long res;
    nb++;
    switch (n) {
      case 0 :
      case 1 : {
        res = n; }
        break;
      default : {
        res = fib(n-1)+fib(n-2); }
        break; }
    return res;
  }

/////////////////////////////////////////////////

/* Programme principal                         */

  public static void main(String [] args) {
    Console.setTitle("TempsFibonacci2");
    long t1;
    long t2;
    long dt;
    int n;
    Console.afficher("Nombre de nombres ? ");
    n = Console.saisirInt();
    for ( int i = 0 ; i < n ; i++ ) {
      nb = 0;
      t1 = System.nanoTime();
      fib(i);
      t2 = System.nanoTime();
      dt = t2-t1;
      Console.formater("%2d : %12d ns %12d appels %10.3f ns/appel\n",i,dt,nb,(double) dt/nb); }
  }
}