IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Fonctions récursives , factorielle , PGCD


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut Fonctions récursives , factorielle , PGCD
    Bonjour ,

    Oui , j interviens beaucoup en ce moment , surement du a l' approche des examens.

    J 'ai une partie du code suivant qui me pose probleme , on fait appel a une fonction récursive factorielle , en voici une partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    static int factorielleRec (int n) {
          int factorielle = 1;
          
          if (n <= 1) {
             return 1;       
          } else {
             return n * factorielleRec (n-1);
          }
       }
    Comment cette fonction retourne le résultat factorielle???

    merci

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 960
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 960
    Par défaut
    Fio,

    Fixe-toi une valeur de n, pas trop grande, par exemple 6, et suis à la amin le déroulement du programme, et tu verras et comprendras (normalement).

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Pour faire n factoriel ( en supposant que n est positif )
    Si n = 0 alors n! = 1 ( par convention )
    Si n = 1 alors n! = 1
    Si n = 2 alors n! = 2 x 1
    ...
    Si n = 4 alors n! = 4 x 3! = 4 x ( 3 x 2! ) = 4 x ( 3 x ( 2 x ( 1 ) ) )
    Et c'est ce que fait ton programme
    Tu prends n, et tu fais n x (n-1)! donc pour faire le (n-1)! tu réappèlles la fonction. Cette opération ne sera pas infinie car au bout d'un moment on aura n-1 <= 1 ... c'est bon là ?

  4. #4
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    , on a repondu en meme temps pratiquement

    en fait je crois que j ' ai capté un peu , le paramètre (n-1) devient quelque part formel et je le remplace dans le type de paramètre de la fonction.
    Si j ai bien compris :

    n-1 devient n dans l appel de la fonction

    la fonction s arrete donc grace a la premiere partie du code qui verifie que n <= 1.

    merci , je dois etre trop fatigué je ne suis plus lucide

  5. #5
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 57
    Par défaut
    Bonjour ,

    il me semble que j' ai réussi a réaliser la fonction pgcd en utilsant une methode recursif , reste à vérifier si cela est correct.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class PGCDRec {
     
        /** Creates a new instance of PGCDRec */
        static int  PGCDRec( int A , int B ) {
     
            if (A == B ){
                return A ;
            }else {
     
            if ( A > B ){
                return PGCDRec (A- B ,B);
     
     
            }else {
                return PGCDRec ( A , B-A );
            }
            }
     
     
        }
     
     
     
     
        public static void main (String [] args ){
            int A, B ;
            int pgcd ;
     
            System.out.println ( "Saisir un entier A " );
            A = Lire.entierInt () ;
     
            System.out.println ( "Saisir un entier B " );
            B = Lire.entierInt () ;
     
            pgcd = PGCDRec (A, B);
            System.out.println ("Le PGCD des 2 entiers saisi est  " + pgcd );
     
     
        }
     
    }

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo