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

C# Discussion :

autre problème de récursion


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut autre problème de récursion
    Bonjour

    dans ce code, je ne comprends pas comment la dernère ligne peut être exécutée.
    Je raisonne comme ceci: quand le compilateur atteint l'avant-dernière ligne du code, il exécute pour la deuxième fois la méthode, donc il repart au début de la méthode et ne va pas plus loin, donc ne peut exécuter la dernière ligne. Pourtant, évidemment, le code est juste. Quelle est l'ordre d'exécution?
    Merci.

    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
    using System;
    public class x4
    {
        static void Main()
        {
        Console.Write(" Input any number : ");
        int num = Convert.ToInt32(Console.ReadLine()); 
        Console.Write(" The digits in the number {0} are : ",num);
        separateDigits(num);
        }
     
        static void separateDigits(int n)
        {
            if (n < 10)
            {
                Console.Write("{0}  ", n);
                return;
            }
            separateDigits(n / 10);
            Console.Write(" {0} ", n % 10);
        }
    }

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Par défaut
    Bonjour,

    C'est le côté déroutant à suivre – y compris (surtout) en mode debug – d'une fonction récursive.

    Tu pourras suivre un peu mieux le déroulement de la fonction avec ton code modifié :

    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
    using System;
    public class x4
    {
        public static int m = 1;
        public static int r = 1;
     
        static void Main()
        {
     
            Console.Write(" Input any number : ");
            int num = Convert.ToInt32(Console.ReadLine());
            Console.Write(" The digits in the number {0} are : ", num);
            separateDigits(num);
        }
     
        static void separateDigits(int n)
        {
            //Console.Write(" {0}-(m{1}) ", n % 10, m); // pour rire un peu
     
            if (n < 10)
            {
                Console.Write("{0}-(r{1}) ", n, r);
                return;
            }
     
            separateDigits(n / 10);
     
            Console.Write(" {0}-(m{1}) ", n % 10, m);
     
            m++;
            r++;
        }
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 442
    Par défaut
    Bonjour,
    La solution se trouve à la ligne 17: Return.
    Si le code passe par là, il sort de la fonction, et donc ne passe pas par la ligne 26.
    La récursion s'arrête donc là.

    Le plus simple pour s'en apercevoir est de poser un point d'arrêt et d'avancer pas à pas, avec une valeur de num assez petite, disons de quoi faire 3/4 boucles.

    Tatayo.

  4. #4
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Par défaut
    Merci, je crois que j'ai compris.

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

Discussions similaires

  1. Excel et publipostage ( problème de "récursion" )
    Par Clad3 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 22/08/2007, 11h38
  2. Autre problèmes de boot entre Vista et XP SP2
    Par Frenken dans le forum Windows Vista
    Réponses: 0
    Dernier message: 25/07/2007, 22h20
  3. Icones : tailles et autres problèmes
    Par Yepazix dans le forum Windows XP
    Réponses: 9
    Dernier message: 05/03/2007, 16h07
  4. problème de coordonnées ou autre problème ?
    Par superC dans le forum DirectX
    Réponses: 8
    Dernier message: 19/02/2007, 21h20
  5. 1016 can't open file "table.MYI" (errno: 132) et autre problème
    Par epeichette dans le forum Installation
    Réponses: 4
    Dernier message: 08/02/2007, 14h15

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