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

Python Discussion :

Fonction Récursive dans une boucle For [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    big boss
    Inscrit en
    Mai 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : big boss

    Informations forums :
    Inscription : Mai 2002
    Messages : 8
    Par défaut Fonction Récursive dans une boucle For
    J'ai vraiment de la difficulté de comprendre le fonctionnement interne d'une fonction récursive mise à l’intérieur d'une boucle For, la fonction je l'ai simplifiée dans l'exemple suivant :

    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
    43
    44
    45
    46
    47
    48
     
    def Recur(n):
        m=n-1
        print('n=',n,'m=',m)
        if m<=0:
            print('oui')
        else:
            for i in range(3):
                print('i=',i)
                Recur(n-1)
     
     
    >>>Recur(3)
     
    n= 3 m= 2
    i= 0 <-------------- 1ere itération de la boucle for
    n= 2 m= 1
    i= 0
    n= 1 m= 0 <---------- m<=0 condition du message
    oui
    i= 1 <-------------- 2eme itération de la boucle for
    n= 1 m= 0 <--------- Recur(n-1) n'est pas exécutée ?
    oui
    i= 2 <--------------- 3eme itération
    n= 1 m= 0 <---------- Toujours pas de Recur(n-1)
    oui
    i= 1 <----------- la boucle recommence(?) si c'est le cas pourquoi i n'est pas égal à 0
    n= 2 m= 1 <---------- Pourquoi ces valeurs?
    i= 0
    n= 1 m= 0
    oui
    i= 1
    n= 1 m= 0
    oui
    i= 2
    n= 1 m= 0
    oui
    i= 2
    n= 2 m= 1
    i= 0
    n= 1 m= 0
    oui
    i= 1
    n= 1 m= 0
    oui
    i= 2
    n= 1 m= 0
    oui
    je n'arrive pas a saisir la logique du déroulement du programme à l’exécution, en plus je ne sais pas qu'est ce qui conditionne le nombre de réponse que la fonction donne , étant débutant es Python je ne sais pas encore utiliser ses techniques de débogage, à ce titre j'ai introduit les print pour suivre l’évolution des variables
    Merci de vos réponses

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Les fonctions récursives sont difficiles à comprendre.
    Essayez avec ce code là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def Recur(n, level=0):
        m=n-1
        print('level=', level, 'n=',n,'m=',m)
        if m<=0:
            print('oui')
        else:
            for i in range(3):
                print('i=',i)
                Recur(n-1, level+1)
    "level" vous permet de visualiser la profondeur des appels i.e. voir un peu mieux ou vous en êtes.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre habitué
    Profil pro
    big boss
    Inscrit en
    Mai 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : big boss

    Informations forums :
    Inscription : Mai 2002
    Messages : 8
    Par défaut
    @wiztrics
    Merci de l’éclairage! hélas il vient me confirmer d'avantage mon incompréhension devant la logique d’exécution de cette fonction
    en prenant comme exemple Recur(3) je constate:
    1- 1ere itération de la boucle(i=0)
    la récursivité s’exécute 3 fois normalement (évolution de n et m) jusqu’à la satisfaction de la condition d'affichage du message
    2- 2ème itération de la boucle (i=1)
    la récursivité ne semble pas se faire (aucun changement ni de level ni de n: level=2,n=1)
    le message est encore affiché (parce que m garde sa valeur de 0
    3- 3eme et dernière itération(i=2)
    même cas la récursivité ne se fait pas(level=2, n=1)
    re-affichage du message (m garde tjrs sa valeur)
    4- 2eme??? iteration (i passe à 1 au lieu de 0) why???
    (level=1,n=2) ?
    5- i =0 (premiere iteration?) a n'y rien comprendre le reste est pour moi un mystère

    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
    >>> Recur(3)
    level= 0 n= 3 m= 2
    i= 0
    level= 1 n= 2 m= 1
    i= 0
    level= 2 n= 1 m= 0
    oui
    i= 1
    level= 2 n= 1 m= 0
    oui
    i= 2
    level= 2 n= 1 m= 0
    oui
    i= 1
    level= 1 n= 2 m= 1
    i= 0
    level= 2 n= 1 m= 0
    oui
    i= 1
    level= 2 n= 1 m= 0
    oui
    i= 2
    level= 2 n= 1 m= 0
    oui
    i= 2
    level= 1 n= 2 m= 1
    i= 0
    level= 2 n= 1 m= 0
    oui
    i= 1
    level= 2 n= 1 m= 0
    oui
    i= 2
    level= 2 n= 1 m= 0
    oui
    >>>

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par wazir Voir le message
    Hélas il vient me confirmer d'avantage mon incompréhension devant la logique d’exécution de cette fonction
    C'est parce que vous avez des difficultés à visualiser ce qui se rapproche d'un parcours d'arbre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    level= 0 n= 3 m= 2
    i= 0
    level= 1 n= 2 m= 1
    i= 0
    level= 2 n= 1 m= 0
    oui
    On a eu 3 appels et... comme on a atteint la feuille, on remonte d'un cran pour continuer avec la boucle for:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i= 1
    level= 2 n= 1 m= 0
    oui
    qui ne va pas bien loin, donc on continue avec le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i= 2
    level= 2 n= 1 m= 0
    oui
    c'est le dernier... donc on remonte d'un cran pour continuer la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i= 1
    level= 1 n= 2 m= 1
    qui appelle la fonction et on redescend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    i= 0
    level= 2 n= 1 m= 0
    oui
    i= 1
    level= 2 n= 1 m= 0
    oui
    i= 2
    level= 2 n= 1 m= 0
    oui
    etc...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre habitué
    Profil pro
    big boss
    Inscrit en
    Mai 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : big boss

    Informations forums :
    Inscription : Mai 2002
    Messages : 8
    Par défaut
    Merci!!!
    Je dois avouer que des arbres et leurs feuilles (informatiques) je n'ai qu'une connaissance assez sommaire...je vais voir de ce coté là..merci quand même!

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

Discussions similaires

  1. Probleme dans une boucle for, faisant appel a une fonction
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/01/2010, 21h41
  2. [MySQL] Fonction récursive dans une boucle
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/02/2008, 12h18
  3. Fonction system() dans une boucle for
    Par banban56 dans le forum C
    Réponses: 3
    Dernier message: 16/06/2007, 18h48
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 10h21

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