bonsoir chères amis. j’ai un petit souci par rapport a un return. j’ai développé une fonction récursive me permettant de savoir si un graphe contient un circuit. voici comment j’ai modélisé mon graphe:
1 | dico = {"a": ["b", "c"], "b": ["d"], "c": [], "d": ["a"]} |
j’ai un dictionnaire dans lequel les clés sont les noeuds du graphe et les valeurs sont les successeurs de ce nœud.
voici ma fonction :
1 2 3 4 5 6 7 8 9 | def circuit(somtest, som, marq, dico): marq.append(som) for i in dico[som]: if i == somtest: print("entrer") return True if i not in marq: circuit(somtest, i, marq, dico) return False |
Pour voir si il y a un circuit il suffit de partir d’un noeud et de voir si je peux revenir a ce même noeud.
Pour cela je vais essayer avec le noeud a.
j’exécute mon programme avec:
1 | >>>circuit("a", "a", [], dico) |
et voici le résultat qu’il me retourne:
1 2 | entrer False |
On voit qu’on rentre dans le if du return True mais la fonction continue jusqu’à retourner False.
Du coup sa bouscule un peu mon entendement, je sais pas si c’est la récursivité que j’ai implémenté qui fait ça.
Aidez moi a bien comprendre ce processus, parce que je n’arrive pas comprendre.
Merci d’avance.