begin process at 2010 03 21 10:47:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths et Algorithmes

 > CLASS IDENTITEREMARQUABLE.JAVA

CLASS IDENTITEREMARQUABLE.JAVA


 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip CLASSE MATRICE

 Sources de la même categorie

TEST DE PRIMALITÉ OPTIMISÉ par Julien39
Source avec Zip CLASSE MATRICE par frankladen11
Source avec Zip Source avec une capture RÉSOLUTION D'ÉQUATION GRÂCE AU CALCUL DES DÉTERMINANTS par frankladen11
Source avec Zip TYPE DE DONNÉES ABSTRAIT GRAPHE par smutsonberg
Source avec Zip Source avec une capture SIMPLEXE ET DUAL par MrRenaud

 Sources en rapport avec celle ci

Source avec Zip CITY, C'EST UN JEU DE VILLE par edouard333
Source avec Zip Source avec une capture SIMPLEXE ET DUAL par MrRenaud
Source avec Zip Source avec une capture ALGORITHME GENETIQUE PROBLEME DU VOYAGEUR DE COMMERCE par sarathai
Source avec Zip Source avec une capture ALGORITHME GÉNÉTIQUE MULTIRHREADÉ par Kotomine
Source avec Zip CLASSE MATRICE par The Red Man

Commentaires et avis

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

Commentaire de Chatbour le 14/07/2008 11:15:21

Salut,

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

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 ?

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.

Commentaire de The Red Man le 14/07/2008 15:18:10

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

Commentaire de itek le 16/12/2008 07:16:43

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

 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...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales