1
Info commune TP 5 : Récursivité, piles
Judicaël Courant
17 décembre 2015 (2015-W50-4)
1 Arbre récursif
Écrire une fonction arbre(n) dessinant un arbre. L’arbre sera dessiné en suivant un procédé récursif. Voici un exemple de ce qui est attendu pour différentes valeurs de𝑛:
On rappelle que la fonctionplot(u, v, color=c)du modulematplotlib.pyplot, où𝑢 et𝑣sont des tableaux contenant chacun𝑘réels, respectivement𝑥0, …, 𝑥u�−1 et𝑦0, …, 𝑦u�−1, trace une ligne brisée reliant les points 𝐴0(𝑥0, 𝑦0), …, 𝐴u�−1(𝑥u�−1, 𝑦u�−1) dont la couleur est donnée par la chaîne de caractèrec ('black' désigne le noir,'blue'le bleu, etc.).
La fonctionshow(), du même module, permet d’afficher le dessin tracé.
2 Parcours d’un répertoire
Le but de cet exercice est d’écrire une fonction Pythonlisting(d)prenant en argument un nom de fichier ou de répertoiredet affichant (à raison d’un nom par ligne)dainsi que les noms de chacun des fichiers ou répertoires contenus dansdsidest un répertoire, ainsi que les noms des fichiers ou répertoires contenus dans ces répertoires, etc. Vous pourrez afficher ces noms dans l’ordre de votre choix.
Pour cela, on pourra utiliser :
− la fonction listdir(d)du module os: elle retourne le nom des répertoires et fichiers contenus dans le répertoire appelé d;
− la fonction isdir(f) du module os.path: elle retourne un booléen valant Truesi et seulement si la chaîne de caractèrefest le nom d’un répertoire.
1. Écrire la fonction demandée sous forme d’une fonction récursive.
2. Écrire la fonction demandée sous forme d’une fonction itérative. Vous aurez besoin pour cela d’une structure de données pour garder la liste de tous les fichiers et réper- toires qu’il reste à explorer. Vous utiliserez une pile à cet effet.
En fait, il existe déjà un moyen en Python de parcourir un répertoire et ses sous-répertoires avec la fonctionwalk(d) du module os. Utilisez-là pour écrire la fonction demandée (on fera notamment en sorte que la fonction continue à marcher si l’argument désigne un fichier qui n’est pas un répertoire).