Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASS IDENTITEREMARQUABLE.JAVA


Information sur la source

Description

un code simpliste juste pour le fun avec une méthode récursive et itérative.
Dans cette classe vous trouvez le calcul :
- d'une factoriel : n!
- d'une combinaison : C(n,k) tel que n <= k !
- d'une identité remarquable général : (a+b)^n = (b+a)^n

 

Source

  • public class IdentiteRemarquable
  • {
  • /**
  • * This method enable to calculate factorial
  • * @param
  • * n - n!
  • */
  • public static long factoriel(int n)
  • {
  • return n < 1 ? 1 : n * factoriel(--n);
  • }
  • /*
  • * This method enable to calculate a combinaison with n <= k
  • * C (n,k) = k! / (n!(k-n)!)
  • */
  • public static long combinaison(int n, int k)
  • {
  • return (factoriel(k) / (factoriel(n) * (factoriel(k-n))));
  • }
  • /**
  • * This method enable to calculate (a+b)^n
  • * (a+b)^n = Sum( C(n,k) * a^k * b^(n-k) )
  • */
  • public static long calculate(int a, int b, int n)
  • {
  • long out = 0;
  • for (int k = 0; k <= n; k++)
  • {
  • out += combinaison(k, n) * Math.pow((double)a, (double)k) * Math.pow((double)b, (double)(n - k));
  • }
  • return out;
  • }
  • /**
  • * Test program
  • */
  • public static void main(String[] args)
  • {
  • // factoriel
  • int f = 5;
  • long resultF = IdentiteRemarquable.factoriel(f);
  • System.out.println("f(" + f + ") = " + resultF); // fact(5) = 120
  • // combinaison
  • int n = 3;
  • int k = 17;
  • long c = IdentiteRemarquable.combinaison(n, k);
  • System.out.println("c(" + n + "," + k + ") = " + c); // C (3,17) = 680
  • // (a+b)^n
  • int a = 5;
  • int b = 2;
  • int n2 = 2;
  • long r = IdentiteRemarquable.calculate(a, b, n2);
  • System.out.println("(" + a + "+" + b + ")^" + n2 + " = " + r); // (5+2)^2 = 49
  • System.out.println(IdentiteRemarquable.calculate(12, 7, 10)); // (12 + 7)^10 = ...
  • }
  • }
public class IdentiteRemarquable
{
	/**
	 * This method enable to calculate factorial
	 * @param
	 *	n - n!
	 */
	public static long factoriel(int n)
	{
		return n < 1 ? 1 : n * factoriel(--n);
	}

	/*
	 * This method enable to calculate a combinaison with n <= k
	 * C (n,k) = k! / (n!(k-n)!)
	 */
	public static long combinaison(int n, int k)
	{
		return (factoriel(k) / (factoriel(n) * (factoriel(k-n))));
	}

	/**
	 * This method enable to calculate (a+b)^n
	 * (a+b)^n = Sum( C(n,k) * a^k * b^(n-k) )	
	 */
	public static long calculate(int a, int b, int n)
	{
		long out = 0;

		for (int k = 0; k <= n; k++)
		{
			out += combinaison(k, n) * Math.pow((double)a, (double)k) * Math.pow((double)b, (double)(n - k)); 
		}

		return out;
	}


	/**
	 * Test program
	 */
	public static void main(String[] args)
	{
		// factoriel
		int f = 5;
		long resultF = IdentiteRemarquable.factoriel(f);

		System.out.println("f(" + f + ") = " + resultF); // fact(5) = 120

		// combinaison
		int n = 3;
		int k = 17;
		long c = IdentiteRemarquable.combinaison(n, k);

		System.out.println("c(" + n + "," + k + ") = " + c); // C (3,17) = 680

		// (a+b)^n
		int a = 5;
		int b = 2;
		int n2 = 2;
		long r = IdentiteRemarquable.calculate(a, b, n2);

		System.out.println("(" + a + "+" + b + ")^" + n2 + " = " + r); // (5+2)^2 = 49

		System.out.println(IdentiteRemarquable.calculate(12, 7, 10)); // (12 + 7)^10 = ... 

	}
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 13/07/2008 11:20:10

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);
}
}

signaler à un administrateur
Commentaire de Chatbour le 14/07/2008 11:15:21

Salut,

coucou747 -> tu peux donner un exemple sur la méthode tail-récursive ?

signaler à un administrateur
Commentaire de The Red Man le 14/07/2008 13:34:36

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 ?

signaler à un administrateur
Commentaire de coucou747 le 14/07/2008 14:49:09

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.

signaler à un administrateur
Commentaire de The Red Man le 14/07/2008 15:18:10

ah d'accord eh bien merci pour l'info !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Algorithme de de combinaison [ par henrypower ] slt à vous je développe en ce moment une application et j'aimerais avoir un programme java (optimal) qui prend en entrée une matrice de dimension n( n Arrondi à n chiffres significatifs [ par juancho2786 ] Bonsoir , je fais une méthode qui permet d'arrondir à n chiffres significatis seulement j'ai un problème. Par exemple lorsque le nombre à arrondir est double != Double [ par lafolle24320 ] Bonjour à tous, est ce que quelqu'un pourrait m'expliquer clairement la différence entre un double et un Double. En fait j'ai un calcul : avec beam en toutes les combinaisons [ par didoux95 ] Bonjour a tous.j'ai pb que je ne parvient pas a le resoudre.voila, j'ai par exemple un Vector&lt;Integer&gt; V = new Vector&lt;Integer&gt;(); contenan demande d'exercices d'algorithme [ par imadinho88 ] slt mes amis je suis un etudiant en developpement d'informatique (1ere année) j 'ai un controle ds l'algorithme la semaine prochaine et j'ai pas trouv Algorithme de Cox et de Boor [ par verybichon ] Quelqu'un saurait il comment on peut faire une B-Spline en passant par l'algorithme de Cox et de Boor en programmation java??J'ai visité tous les site faire une combinaison [ par ulysse00 ] bonjour j'ai malheureusement un problème et je coince et je n'arrive pas a le résoudre je voulais faire une combinaison entre les élément par exemple NSGA2 [ par romeofr ] J'ai un probleme pour developper un algorithme d'optimisation combinatoire multi objectifJe cherche un script pour m'aider a implemanter l'algorithm Sortir un zéro avec un Math.random()*10+1 [ par daviddubois ] Bonjour tout le monde,J'essaie d'avoir des chiffres de 0 à 10 avec un Math.random(), le problème est qu'il sort des chiffres entre 1 et 10.Il ne sort la fonction Math.random() [ par dorine82 ] bonjour,j'aimerais savoir comment utiliser deux threads chacun a son tour. si par exemple j' ai le thread A et le thread B , je dois avoir comme resul


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,359 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.