Schéma récursif

jacma Messages postés 36 Statut Membre -  
crabs Messages postés 909 Statut Membre -
Bonjour
Je cherche un shéma clair exposant une démarche récursive pour lparcourir toutes les branches d'un arbre. Suivant le principe qu'un schéma vaut mieux que toute explication, j'ai vainement cherché un tel shéma.
A défautn l'exposé textuel de l'itération me suffirait peut-être.
Merci.

4 réponses

  1. hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
     
    Salut,
    Sand quelle langage? En C ou je ne sais pas C++, je crois qu'il y a une fonction qui s'appelle retrive(). À confirmer!
    2
  2. jacma Messages postés 36 Statut Membre
     
    Merci de ta réponse
    C'est en VB, mais je pense que cela doit se ressembler quel que soit le langage: c'est un shéma que je cherche. J'ai rélisé la fonction récursive qui fonctionne en VB me permettant de parcourir une arborscence, j'arrive à peu près à l'expliquer textuellement, mais d'une façon peut-être pas très claire, et c'est donc pour cela que je pense que le shéma me serait d'une grande utilité.
    0
  3. crabs Messages postés 909 Statut Membre 507
     
    Salut,
    Le principe est simple, mais ça dépend de la strcuture de ton noeud et de
    comment tu gères le chainage des noeud.
    Dans ce principe la racine n'a pas de frére, mais que des fils, et une feuille
    n'a pas de fils : ça termine la récursivité.
    parcourir( noeud )
      {
       pour tous les fils de noeud :
          parcourir( le fils courant )
      }
    

    Pour l'appel :
    parcourir( racine )

    Habituellement une struture noeud au minimun possède les chainages suivant
    -> noeud pere [nul pour la racine]
    -> noeud premier fils [nul pour les feuilles]
    -> noeud frère suivant [attention c'est pas une liste circulaire]
    La boucle "pour tous les fils de noeud" devient :
    PROCEDURE parcourir( NOEUD n )
    DEBUT
      NOEUD fils ;
      // Faire le traitement sur le noeud
      fils=n.fils
      TANT.QUE( fils <> NUL )
      DEBUT
         APPELER parcourir(fils) ;
         fils = fils.frere ;
      FIN
    FIN
    

    A+, crabs
    0
  4. jacma Messages postés 36 Statut Membre
     
    Merci de ta réponse.
    Comme déja précisé, je connais et le principe et le code puisque j'ai programmé une procédure récursive qui parcourt toute l'arborescence. C'est vraiment un shém (un dessin (;-) que je recherche. Ci d'ailleurs cela peut servir, voici le code que je cherche à présenter en organigramme.

    Private Sub WriteChild(ByVal iNodeIndex As Integer)
    'Ecriture des noeuds enfants dans la table. C'est une procédure récursive pour
    'parcourir dans une boucle tous les noeuds enfants. Elle identifie l'index
    'du noeud ayant les enfants.

    Dim i As Integer
    Dim iTempIndex As Integer
    iTempIndex = TreeView1.Nodes(iNodeIndex).Child.FirstSibling.Index
    'Parcours tous les noeuds enfants d'un noeud parent (dans une boucle)
    For i = 1 To TreeView1.Nodes(iNodeIndex).Children
    rsNoeuds.AddNew
    rsNoeuds("ID_NoeudParent") = TreeView1.Nodes(iTempIndex).Parent.Key
    rsNoeuds("ID_Noeud") = TreeView1.Nodes(iTempIndex).Key
    rsNoeuds("Nom_Noeud") = TreeView1.Nodes(iTempIndex).Text
    rsNoeuds("Image") = TreeView1.Nodes(iTempIndex).Image
    rsNoeuds("Selected_Image") = TreeView1.Nodes(iTempIndex).SelectedImage
    rsNoeuds.Update

    'Si le noeud en cours possède des noeuds enfants, la procédure fait appel à elle même (récurcivité)
    If TreeView1.Nodes(iTempIndex).Children > 0 Then
    WriteChild (iTempIndex)
    End If
    'Si ce n'est pas le dernier noeud enfant, on passe au noeud enfant suivant.
    If i <> TreeView1.Nodes(iNodeIndex).Children Then
    iTempIndex = TreeView1.Nodes(iTempIndex).Next.Index
    End If
    Next i

    End Sub
    0
    1. crabs Messages postés 909 Statut Membre 507
       
      Un shéma sur la recursivité, c'est comme l'image que l'on voit sur une télé
      alors qu'on est en train de la filmer. Rien de simple...
      Par contre tu peux proposer un dessin de ton arbre et montrer sur le shéma
      la suite des appels et quand tu rencontres les phases principales de ton algo.
      De plus tu numérote bien les étapes dans leur sens de déroulement et comme
      tu remplis 'rsNoeuds'.
      0