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 !

PGCD RÉCURSIF


Information sur la source

Catégorie :Application Niveau : Débutant Date de création : 16/01/2003 Date de mise à jour : 16/01/2003 09:40:45 Vu : 2 922

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

calcul du PGCD en récursif

* Remarques : le pgcd de 2 nombres a et b, avec a >=b, peut etre défini de la
                facon suivante :  il est egal a b si b divise a.
                                    sinon il est egal au pgcd de 'b' et de 'a mod b'
 

Source

  • #pragma hdrstop
  • #pragma argsused
  • #include <conio.h>
  • #include <iomanip.h>
  • #include <iostream.h>
  • int pgcd(int a, int b) ;
  • void main(void)
  • {
  • int nb1, nb2 ;
  • int ret ;
  • cout << "entrez le 1er nombre : " ;
  • cin >> nb1 ;
  • cout << endl << "entrez le 2eme nombre : " ;
  • cin >> nb2 ;
  • ret = pgcd(nb1, nb2) ;
  • cout << endl << "le pgcd de " << nb1 << " et " << nb2 << " est : " << ret ;
  • cout << endl << endl << "appuyer sur une touche pour terminer..." ;
  • getch() ;
  • }
  • //---------------------------------------------------------------------------
  • int pgcd(int a, int b)
  • {
  • if (a % b == 0)
  • return b ;
  • return pgcd(b, a % b) ;
  • }
#pragma hdrstop

#pragma argsused

#include <conio.h>
#include <iomanip.h>
#include <iostream.h>

int pgcd(int a, int b) ;

void main(void)
    {
    int nb1, nb2 ;
    int ret ;

    cout << "entrez le 1er nombre : " ;
    cin >> nb1 ;

    cout << endl << "entrez le 2eme nombre : " ;
    cin >> nb2 ;

    ret = pgcd(nb1, nb2) ;

    cout << endl << "le pgcd de " << nb1 << " et " << nb2 << " est : " << ret ;

    cout << endl << endl << "appuyer sur une touche pour terminer..." ;
    getch() ;
    }
//---------------------------------------------------------------------------

int pgcd(int a, int b)
    {
    if (a % b == 0)
        return b ;

    return pgcd(b, a % b) ;
    }

Commentaires et avis

signaler à un administrateur
Commentaire de cmarsc le 16/01/2003 11:06:04

#pragma hdrstop  #pragma argsused sont - ils indispensables
#include &lt;iomanip.h&gt; ne sert pas à grand chose
void main(void) return ;

signaler à un administrateur
Commentaire de GoldenEye le 16/01/2003 16:32:28

Mêmes remarques que mon collègue.
Petite astuce d'optimisation : tu sais que l'opération modulo est très coûteuse en termes de temps de calcul dans la mesure où elle fait intervenir une division. Or tu calcules deux fois a%b dans ta fonction PGCD. Sauve le premier calcul dans une variable auxiliaire que tu réutiliseras afin de ne pas refaire le même calcul une seconde fois

int pgcd(int a, int b)
    {
    int temp;
    if ((temp=a % b) == 0)
        return b ;

    return pgcd(b, temp) ;
    }

Par ailleurs, tu m'as l'air d'être un(e) maniaque de la récursivité (c'est peut-être ton programme actuel de cours :-)). Si l'élégance de la méthode est incontestable, ses performances le sont moins (sauf dans des cas particuliers. En l'occurence ici, la méthode itérative du calcul de PGCD (l'algorithme d'Euclide) est plus performante.

Voilà pour cette fois

signaler à un administrateur
Commentaire de GoldenEye le 16/01/2003 16:36:12

Autre chose, vive la compacité du C:

int pgcd(int a,int b)
{
int temp;
return((!(temp=a%b))?b:pgcd(b,temp));
}

Juste pour le clin d'oeil ;-)

signaler à un administrateur
Commentaire de loraine9999 le 16/01/2003 18:12:18

hé oui c est la récursivité en puissance en cours ces temps ci alors je fais partager... ;-)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 1,669 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é.