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

Java Discussion :

Recursive Method Java


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut Recursive Method Java
    Bonjour,

    J'ai le code suivant, j'arrive pas a comprendre le résultat obtenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class JavaApplication {
     
        public static void main(String[] args) {
     
           A x=new A();
           x.rec(2);
     
        }   
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class A {
     
        public void rec(int v){
     
            if(v > 0)
                rec(v-1);
     
            System.out.println(v);
        }
     
    }
    Resultat :
    0
    1
    2

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 219
    Points : 20 687
    Points
    20 687
    Par défaut
    Hello,

    cette méthode rec() qui a un seul paramètre,

    on voit qu'à la fin, elle fait un System.out.println() pour afficher son paramètre v. C'est aussi la seule instruction d'affichage du programme, donc rien d'autre n'est affiché.
    Conclusions :
    - Chaque fois que rec() est appelée, elle affiche une ligne et une seule.
    - Toute ligne en sortie correspond à un appel à rec().
    - Ce qui est affiché est la valeur de v qui a été donné en paramètre à rec().
    - L'affichage se fait à la fin de l'exécution de rec().

    Avant cet affichage, il y a un if(). Ce if peut être vrai ou faux.
    S'il est faux, il ne se passe rien, et rec() ne fait rien d'autre qu'afficher sa ligne.
    S'il est vrai, alors rec() effectue une seule chose avant d'afficher sa ligne.

    Cette autre chose que rec() peut faire, est un appel à rec(), avec paramètre v-1.

    En supposant qu'on n'appelle pas rec() avec un paramètre négatif (cette supposition est vraie : le paramètre vaut 2, qui n'est pas négatif), alors on constate que la récursion va fatalement s'arrêter :
    - pour chaque appel à rec(),
    -- ou bien v vaut zéro, auquel cas rec() ne fait plus d'appel à rec() et la récursion s'arrête
    -- ou bien v vaut plus que zéro, auquel cas il y a un appel récursif à rec(), avec un v de valeur v - 1.
    Donc à chaque fois que v vaut plus que zéro, au prochain appel il se rapproche de zéro. Fatalement il vaudra zéro à un moment ou à un autre.

    Donc :
    - On fait un appel récursif à rec() qui va forcément s'arrêter au moment où son v vaut zéro
    - Chaque appel à rec() affiche une ligne
    - Cette ligne est affichée juste avant que l'appel à rec() se termine.

    Résultat :
    - La récursion fait son œuvre et appelle rec() jusqu'à ce que son v vaille zéro.
    - A ce moment-là on a terminé la récursion et c'était le dernier appel à rec().
    - Cet appel affiche son v, qui vaut zéro. Puis il se termine
    - On remonte à l'appel précédent, qui a terminé son travail. Il affiche donc son v, qui vaut 1.
    - Et ainsi de suite jusqu'à remonter au premier appel de v, qui va afficher le paramètre avec lequel rec() a été appelée au début.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par thelvin Voir le message
    - Cet appel affiche son v, qui vaut zéro. Puis il se termine
    ok. c'est claire.

    Citation Envoyé par thelvin Voir le message
    - On remonte à l'appel précédent, qui a terminé son travail. Il affiche donc son v, qui vaut 1.
    - Et ainsi de suite jusqu'à remonter au premier appel de v, qui va afficher le paramètre avec lequel rec() a été appelée au début.
    Pourquoi le programme va exécuter encore fois et affiche les deux valeurs 1 et 2.
    J'ai pense que l'affichage est seulement 0.

    Merci beaucoup.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 219
    Points : 20 687
    Points
    20 687
    Par défaut
    Il y a un System.out.println() dans la méthode rec().
    Il n'est pas dans un if, et il n'y a rien pour sortir de rec() avant ce System.out.println().
    Par conséquent pour chaque appel à rec(), il y a exécution d'un System.out.println(), donc un affichage.

    Combien y a-t-il d'appels à rec() ?
    S'il y a plus d'un appel à rec(), et que tous les appels à rec() font un affichage, alors comment serait-il possible qu'il y ait un seul affichage et pas d'autres ensuite ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2015
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2015
    Messages : 151
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Par conséquent pour chaque appel à rec(), il y a exécution d'un System.out.println(), donc un affichage.

    Combien y a-t-il d'appels à rec() ?
    S'il y a plus d'un appel à rec(), et que tous les appels à rec() font un affichage, alors comment serait-il possible qu'il y ait un seul affichage et pas d'autres ensuite ?
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/03/2007, 19h28
  2. Appel d'une methode java dans un fichier jsp
    Par kodo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/05/2006, 13h46
  3. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 15h50
  4. [Applet] appel de methodes java en javascript
    Par soulhouf dans le forum Applets
    Réponses: 16
    Dernier message: 06/09/2005, 14h18
  5. [Reflection] Interpreter une chaine en une methode java
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 09/10/2004, 15h11

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