Bonjour je suis nouveau sur ce forum et j'aimerais savoir comment calculer la complexité d'une fonction récursive et notamment la complexité de la fonction cis-dessous qui a en plus une boucle for. Merci de votre aide ^^ (la fonction)


Code python : 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
 
def Recherche(bibli, motARechercher, fenetre,  listText, file = '/', fileName = '/', premiereRecurrence = True) :
    ''' Fonction recursive qui recherche des livres selon un mot'''
 
    if premiereRecurrence == True : # pour ne pas que ça se lance lors de la récursion
        for texteACacher in listText :
            texteACacher.pack_forget() #efface les précédents résultats affichés par la fonction de recherche si elle a été lancé précedemment
 
    fileCopy = file #on sauvegarde le chemin de départ
    fileNameCopy = fileName #on sauvegarde le chemin de départ
 
    for livreOuSousBibli in os.listdir('bibliotheque' + file) :
 
        if os.path.isdir('bibliotheque' + file + livreOuSousBibli): # un sous dossier équivaut à une sous-bibliotheque
            file +=  livreOuSousBibli + '/' # on modifie le lien
            fileName +=  livreOuSousBibli[:-3] + '/' # on modifie le lien (-3 pour enlever le nombre qui correspond à la position
            # d'une sous-bibliothèque et qui est à la fin du nom du dossier représentnat la sous-bibli)
            Recherche(bibli[livreOuSousBibli[:-3]], motARechercher, fenetre,  listText,  file = file, fileName = fileName, premiereRecurrence = False) # on lance la récursion pour le faire aussi pour les livres dans la sous-bibli
        else :
            if livreOuSousBibli != '.DS_Store' : # fichier caché sur mac qui est lu par 'listDir' et qui m'a fait perdre de nombreuses heures pour trouver le problème
                f = open('bibliotheque' + file + livreOuSousBibli, 'r') #on ouvre un fichier txt correspondant à un livre
                lignes  = f.readlines()
                ensembleDesMots = " ".join(lignes)
                ensembleDesMots = ensembleDesMots.replace('\n', '')
                ensembleDesMots = ensembleDesMots.split(' ') # on créer ainsi une liste qui contient tout les mots de tout les livres de la bibliothèques
                pasDeuxFois = True
                for mot in ensembleDesMots : #pour chaque mot :
                    if mot == motARechercher and pasDeuxFois == True :
                        # on vérifie si c'est le mot qu'on souhaite rechercher,( pas deux fois permet que si le même livre contient plusieurs fois le mot à rechercher, il ne s'affiche qu'une fois)
                        pasDeuxFois = False
                        textAffiche = Label(fenetre, text = 'bibliotheque' + fileName + livreOuSousBibli[:-4]) #le -4 sert à enlever le .txt du fichier qui représente le livre
                        textAffiche.pack() #affiche le chemin du livre qui contient le le mot souhaité
                        listText.append(textAffiche) #stocke les labels affichés pour pouvoir les supprimer par la suite
 
 
                f.close()
        file = fileCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart
        fileName = fileNameCopy #on réinitialise pour le prochaiin livre en redonnant le chemin de depart