CLASS IDENTITEREMARQUABLE.JAVA

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 13 juil. 2008 à 11:20
itek Messages postés 3 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 16 décembre 2008 - 16 déc. 2008 à 07:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47302-class-identiteremarquable-java

itek Messages postés 3 Date d'inscription vendredi 8 avril 2005 Statut Membre Dernière intervention 16 décembre 2008
16 déc. 2008 à 07:16
voici ma version de la fonction en utilisant tail-rec et Biginteger:

private BigInteger factoriel(BigInteger currentNumber, BigInteger sum) {
if(currentNumber.intValue()== 1) {
return sum;
} else {
return factoriel(currentNumber.subtract(new BigInteger("1")), sum.multiply(currentNumber));
}

}
public BigInteger factoriel( BigInteger n) {
return factoriel(n, new BigInteger("1"));
}

/*
* This method enable to calculate a combinaison with n <= k
* C (n,k) = k! / (n!(k-n)!)
*/
public BigInteger combinaison(String n, String k){
BigInteger Bn = new BigInteger (n);
BigInteger Bk = new BigInteger (k);
return (factoriel(Bk).divide((factoriel(Bn).multiply((factoriel(Bk.subtract(Bn)))))));
}
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
14 juil. 2008 à 15:18
ah d'accord eh bien merci pour l'info !
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
14 juil. 2008 à 14:49
la mathode tail-rec, c'est celle que j'ai mise plus haut.
beaucoup de compilateurs s'occupent des fonctions tail-recursives pour les rendre iteratives, ce qui evite de faire exploser la pile.
The Red Man Messages postés 111 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 13 juin 2010 2
14 juil. 2008 à 13:34
salut coucou747,

peux-tu me dire l'intérêt d'utiliser la méthode du "tail-récursive" par rapport à la récursivité pur ?
Chatbour Messages postés 71 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 12 juillet 2009 10
14 juil. 2008 à 11:15
Salut,

coucou747 -> tu peux donner un exemple sur la méthode tail-récursive ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
13 juil. 2008 à 11:20
salut
en vrai, t'as plusieurs facons de calculer n!, et le tien n'est pas particulierement interessant...
t'as l'exemple recursif pur (le tien)
l'exemple iteratif
et l'exemple tail-recursif (qui est deja plus interessant)

en java, t'as la chance d'avoir des methodes private, ce qui te permet de faire des methodes innaccessibles, donc de faire des methodes recursives "avec un premier appel different" on appelle ca un chapeau...

voici ce genre d'exemple en java :

class foo{
private int fact(int n, int acc){
if (n==0) return 1;
return fact(n-1, n*acc);
}
public int fact( int n) throws Exception{
if (n<0) throw new Exception("Oo");
return fact(n, 1);
}
}
Rejoignez-nous