#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 sont - ils indispensables#include <iomanip.h> ne sert pas à grand chosevoid main(void) return ;
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
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 ;-)
hé oui c est la récursivité en puissance en cours ces temps ci alors je fais partager... ;-)
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte