/********************************
* Version de base de Fibonacci
********************************/
package fr.univ_orleans.bourges.io91.td6;
/**
* Une implantation de la suite de Fibonacci
*/
public class Fibo
{
/**
* Calcule le nème nombre de Fibonacci
*
* @param n Un entier positif ou nul.
* @return Le nème nombre de Fibonacci, sous la forme d'un entier positif.
* @throws RuntimeException Si n est négatif*/
public int f(int n)
{
if (n<0) throw new RuntimeException("Erreur lors du calcul de Fibo.f("+n+"): l'argument doit être positif ou nul.");
if (n==0) return 1;
if (n==1) return 1;
if (n>=2) return this.f(n-1) + this.f(n-2);
}
}
/********************************
* Avec un compteur.
********************************/
package fr.univ_orleans.bourges.io91.td6;
/**
* Une implantation de la suite de Fibonacci
*/
public class Fibo
{
/**
* Le nombre de fois où f a été invoqué.
*/
private int compteur = 0;
/**
* Calcule le nème nombre de Fibonacci
*
* @param n Un entier positif ou nul.
* @return Le nème nombre de Fibonacci, sous la forme d'un entier positif.
* @throws RuntimeException Si n est négatif ou si le calcul est trop long.*/
public int f(int n)
{
++compteur;
if(compteur>30)
throw new RuntimeException("Calcul trop long");
if (n<0) throw new RuntimeException("Erreur lors du calcul de Fibo.f("+n+"): l'argument doit être positif ou nul.");
if (n==0) return 1;
if (n==1) return 1;
if (n>=2) return this.f(n-1) + this.f(n-2);
}
}
/************************************
* Avec plusieurs types d'exceptions
************************************/
package fr.univ_orleans.bourges.io91.td6;
/**
* Une exception lancée si l'utilisateur a donné un argument incorrect.
*
* Comme cette exception étend RuntimeException, il n'est pas obligatoire de la rattrapper.
*/
public class ArgumentIncorrectException extends RuntimeException
{
}
package fr.univ_orleans.bourges.io91.td6;
/**
* Une exception lancée si un calcul dure trop longtemps
*
* Comme cette exception étend RuntimeException, il n'est pas obligatoire de la rattrapper.
*/
public class CalculTropLongException extends RuntimeException
{
}
package fr.univ_orleans.bourges.io91.td6;
/**
* Une implantation de la suite de Fibonacci
*/
public class Fibo
{
/**
* Le nombre de fois où f a été invoqué.
*/
private int compteur = 0;
/**
* Calcule le nème nombre de Fibonacci
*
* @param n Un entier positif ou nul.
* @return Le nème nombre de Fibonacci, sous la forme d'un entier positif.
* @throws RuntimeException Si n est négatif ou si le calcul est trop long.*/
public int f(int n)
{
++compteur;
if(compteur>30)
throw new CalculTropLongException();
if (n<0) throw new ArgumentIncorrectException();
if (n==0) return 1;
if (n==1) return 1;
if (n>=2) return this.f(n-1) + this.f(n-2);
}
}
/************************************
* Avec un chronomètre
************************************/
package fr.univ_orleans.bourges.io91.td6;
/**
* Une exception lancée si l'utilisateur a donné un argument incorrect.
*
* Comme cette exception étend RuntimeException, il n'est pas obligatoire de la rattrapper.
*/
public class ArgumentIncorrectException extends RuntimeException
{
}
package fr.univ_orleans.bourges.io91.td6;
/**
* Une exception lancée si un calcul dure trop longtemps
*
* Comme cette exception étend RuntimeException, il n'est pas obligatoire de la rattrapper.
*/
public class CalculTropLongException extends RuntimeException
{
}
package fr.univ_orleans.bourges.io91.td6;
/**
* Une implantation de la suite de Fibonacci
*/
public class Fibo
{
/**
* Le nombre de fois où f a été invoqué.
*/
private int compteur = 0;
/**
* Instant de la création de l'objet.
*
* Mesuré en millisecondes depuis le premier janvier 1970 à 0h.
*/
private final long lancement = System.currentTimeMillis();
/**
* Calcule le nème nombre de Fibonacci
*
* @param n Un entier positif ou nul.
* @return Le nème nombre de Fibonacci, sous la forme d'un entier positif.
* @throws RuntimeException Si n est négatif ou si le calcul est trop long.*/
public int f(int n)
{
if (System.currentTimeMillis() - lancement > 1000) //Si le calcul a duré plus d'une seconde
throw new CalculTropLongException();
if (n<0) throw new ArgumentIncorrectException();
if (n==0) return 1;
if (n==1) return 1;
if (n>=2) return this.f(n-1) + this.f(n-2);
}
}