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 :

Profondeur de la récursion


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Profondeur de la récursion
    Bonjour à tous,

    En Java, je veux écrire une méthode qui n'a pas de paramètre et mettre au point un algorithme récursif avec cette méthode (en fait, je réécris la méthode toString d'une classe quelconque, donc elle n'a pas de paramètre).
    Mon problème, c'est qu'il faut que la String retournée affiche du texte indenté, et pas n'importe comment: a chaque "imbrication" (a chaque nouvel appel de la fonction par elle-même), il faut indenter d'une tabulation en plus.
    Ce qui me manque donc, c'est le nombre de fois que j'ai appelé la fonction récursive, ce que j'appelle (peut-être à tort) la "profondeur" de la récursion.

    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Appel 1
        Appel 2
            Appel 3
            Appel 3
                Appel 4
            Appel 3
    Appel 1
    Si vous connaissez un moyen simple et rapide d'obtenir cet entier, sans passer par un paramètre supplémentaire de la méthode, merci de le partager.
    Et si au passage vous connaissez une astuce pour concaténer n fois le même caractère à une String, c'est cool aussi.
    Genre "\t" concaténé 8 fois à la String afficher, sans passer par une boucle for.

    Merci !

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    je pense qu'il suffirait d'incrémenter une variable statique dans la méthode récursive. Genre dans la méthode principale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static int compteur = 0;
    Puis dans la méthode récursive:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String maMethodeRecursive()
    {
      ++compteur;
      /.../
    }
    La variable statique n'existe qu'une fois dans le programme...il y a des explications un peu partout sur ce type de variable pour avoir plus de détails sur le sujet.

    En espérant que cela vous aide...

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    la méthode propre, c'est d'avoir toString qui n'est pas récursif, mais délègue son travail à un méthode recursive. Vous n'aurez alors pas de soucis en multithread et éviterez de construire des strings inutiles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public String toString(){
        StringBuilder sb = new StringBuilder();
        return toStringRecursif(sb,0).toString();
    }
    protected StringBuilder toStringRecursif(StringBuilder builder, int deep){
         builder.append(......);
         ....
         unObject.toStringRecursif(builder,deep+1);
         unAutreObject.toStringRecursif(builder,deep+1);
         return builder;
    } 
     
     
    monObjet.toString();

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour vos conseils.
    Même si, je l'avoue, je ne comprends pas tout.
    Finalement j'ai réglé mon problème en m'apercevant que la méthode toString fonctionne avec un paramètre entier.

    Mais ma question c'était plus :
    Connaissez-vous un moyen (une méthode déjà implémentée dans java) d'obtenir un entier qui corresponde à la "profondeur de récursion" ("je me situe dans l'appel numéro combien?"), sans passer par un paramètre de la méthode récursive. Quelle que soit ladite méthode récursive (que ce soit toString ou pas; ça c'était juste pour contextualiser ma question).

    Merci.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    non, il n'y a pas

  6. #6
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    non, il n'y a pas
    Dans l'absolu, si c'est possible en passant par la stacktrace (tant que la récursivité reste dans le même thread).

    Après, je le conçois, c'est un moyen lourd et à n'utiliser que dans certains cas très particuliers (dont ne fait pas partie le problème de la profondeur de récursivité).

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

Discussions similaires

  1. Profondeur insufisante
    Par Dr@ke dans le forum OpenGL
    Réponses: 4
    Dernier message: 26/02/2005, 14h30
  2. algo de recherche en profondeur
    Par sylsau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2005, 22h59
  3. [DEBUTANT] [GLUT] profondeur de vision dans l'ecran
    Par barthelv dans le forum OpenGL
    Réponses: 3
    Dernier message: 17/11/2004, 16h59
  4. Bug avec le test de profondeur
    Par Tellmarch dans le forum OpenGL
    Réponses: 1
    Dernier message: 17/10/2004, 00h59
  5. Problème de profondeur
    Par nans80 dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/04/2004, 21h51

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