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

JavaScript Discussion :

R�cursion : return devient undefined


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    D�cembre 2019
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 2
    Par d�faut R�cursion : return devient undefined
    Bonjour,
    je tente de r�soudre une des fonctions du site "code war", mais j'obtiens un comportement que je ne comprend pas. ( le lien de l'exercice)
    Quand je suis le d�roulement du script dans la d�bogueur de chrome, la variable "reponse" a bien la valeur attendu au moment du return, mais juste apr�s elle reprend son ancienne valeur et le return devient "undefined".
    Je ne sais pas trop par quel bout prendre le probl�me pour une recherche sur Google, (un return "undefined", �a emm�ne une infinit� de r�ponse en tout genre) du coup je me tourne vers vous, en esp�rant pouvoir trouver de l'aide, et ne pas poser une question d�j� traiter mille fois, mais que je n'aurai pas su prendre par le bon bout pour trouver la solution tout seul.
    merci par avance.
    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
     
    function digital_root(n) {
      var reponse = 0;
      var str = n.toString()
     
      for(var i=0; i<str.length; i++){
        reponse += parseInt(str[i])
      }
      if(reponse<9){
      return reponse;
     }else
      {
        digital_root(reponse);
       }
    }
     
    console.log(digital_root(16) + " expect 7");
    console.log(digital_root(132189) + " expect 6");
    console.log(digital_root(493193) + " expect 2");

  2. #2
    Mod�rateur
    Avatar de joel.drigo
    Homme Profil pro
    Ing�nieur R&D - D�veloppeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur R&D - D�veloppeur Java
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par d�faut
    Salut,

    Il manque un return, dans le cas de l'appel r�cursif, donc �a retourne "rien", soit undefined :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    return digital_root(reponse);
    L'expression "�a marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le probl�me.
    La plupart des r�ponses � vos questions sont d�j� dans les FAQs ou les Tutoriels, ou peut-�tre dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement pos�e et r�dig�e et vous aurez plus de chances de r�ponses adapt�es et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'�diteur de messages).
    Nouveau sur le forum ? Consultez Les R�gles du Club.

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    Bonjour,

    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
    "use strict";
    function digital_root(n) {
      var str = n.toString()
      var sum = 0;
      for(var i=0; i<str.length; i++){
        sum += parseInt(str[i]);
      }
      if(sum.toString().length>1){ // si il y a plus de 2 caractères
        sum = digital_root(sum); // récursivité
      }
      return sum;
    }
     
    console.log(digital_root(16) + " expect 7");
    console.log(digital_root(132189) + " expect 6");
    console.log(digital_root(493193) + " expect 2");
    Petite variante, avec affichage des calculs interm�diaires :
    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
    "use strict";
    function digital_root(n) {
      var sum = 0;
      var str = n.toString().split('');
      var txt = str.join(' + ');
     
      for(var i=0; i<str.length; i++){
        sum += parseInt(str[i]);
      }
      console.log( n  + ' : ' + txt + ' = ' + sum );
      if(sum.toString().length>1){ // si il y a plus de 2 caractères
        sum = digital_root(sum); // récursivité
      }
      return sum;
    }
     
    console.log(16 + ' -> ' + digital_root(16));
    console.log(132189 + ' -> ' + digital_root(132189));
    console.log(493193 + ' -> ' + digital_root(493193));
    Donne (dans la console) :
    16 : 1 + 6 = 7
    16 -> 7
    132189 : 1 + 3 + 2 + 1 + 8 + 9 = 24
    24 : 2 + 4 = 6
    132189 -> 6
    493193 : 4 + 9 + 3 + 1 + 9 + 3 = 29
    29 : 2 + 9 = 11
    11 : 1 + 1 = 2
    493193 -> 2
    Derni�re modification par Invit� ; 24/12/2019 � 12h53.

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    D�cembre 2019
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activit� : Administrateur de base de donn�es

    Informations forums :
    Inscription : D�cembre 2019
    Messages : 2
    Par d�faut
    Citation Envoy� par joel.drigo Voir le message
    Salut,

    Il manque un return, dans le cas de l'appel r�cursif, donc �a retourne "rien", soit undefined :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    return digital_root(reponse);
    le "return"r�gle mon probl�me. merci.
    par contre le comportement n'est pas clair dans ma t�te, car en suivant le code dans le d�bogueur de chrome, l'appelle a la fonction "digital_root" se fait bien dans le "else", et "reponse" ne devient "undefined"que apr�s �tre rentrer dans le "if(reponse<9)"

    merci pour votre aide a tous les 2.

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Pour simplement corriger TON code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function digital_root(n) {
      var reponse = 0;
      var str = n.toString()
     
      for(var i=0; i<str.length; i++){
        reponse += parseInt(str[i])
      }
      if(reponse>9){
        reponse = digital_root(reponse);
      }
        return reponse;
    }
    reponse = digital_root(reponse); : il faut quand m�me r�cup�rer... la r�ponse !

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. return de fonction undefined
    Par Thielaco dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 10/06/2019, 17h21
  2. [AJAX] Ajax return undefined data
    Par sonia39 dans le forum jQuery
    R�ponses: 3
    Dernier message: 16/06/2018, 14h33
  3. Return "undefined" sur fonction
    Par krzysiu dans le forum NodeJS
    R�ponses: 2
    Dernier message: 17/03/2015, 20h32
  4. Undefined avec return
    Par kryogen dans le forum G�n�ral JavaScript
    R�ponses: 6
    Dernier message: 24/06/2009, 15h00
  5. 'exit' undefined; assuming extern returning int
    Par petdelascar dans le forum MFC
    R�ponses: 2
    Dernier message: 18/10/2005, 12h15

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