/* Exemple d'utilisation de l'utilitaire Minuteur */

public class FibonacciAvecMinuteur {

/* Fonction de calcul et retour                */
/* de Fib(n) par methode recursive             */
/* Définition:                                 */
/*  - Fib(0) = 0                               */
/*  - Fib(1) = 1                               */
/*  - Fib(n) = Fib(n-1)+Fib(n-2)               */
/* n : valeur pour laquelle Fib(n) est calculé */

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

  public static void main(String [] args) {
    for ( int n = 0 ; n <= 20 ; n++ ) {
      /* Declaration du Minuteur minuteur           */
      Utilitaires.Minuteur minuteur = new Utilitaires.Minuteur();
      /* Configuration du temps de commutation      */
      /* de minuteur (en milliemes de seconde)      */
      minuteur.temps = 60000;
      /* Lancement de minuteur                      */
      minuteur.lancement();
      /* Initialisation du compteur d'execution     */
      long cpt = 0;
      /* Prise de temps initiale                    */
      long ti = System.nanoTime();
      /* Utilisation de minuteur par construction   */
      /* d'une boucle tant que dont la condition    */
      /* d'arrêt porte sur la valeur                */
      /* de son champ booléen enCours               */
      while ( minuteur.enCours == true ) {
        fib(n);
        cpt++; }
      /* Prise de temps finale                      */
      long tf = System.nanoTime();
      /* Affichage des resultats                    */
      Ecran.formater("%2d : ",n);
      Ecran.formater("%12d executions en %14d ns",cpt,tf-ti);
      Ecran.formater(", temps moyen : %16.3f ns\n",(double) (tf-ti)/cpt); }
  }
}