FeuilleRecursivite 2020
FeuilleRecursivite 2020
FeuilleRecursivite 2020
C’est la « suite de Fibonacci », une suite d’entiers qui a été utilisée au XIIIe siècle pour décrire la croissance
d’une population de lapins (on compte les couples à chaque génération, sans décès).
Vous remarquerez que c’est une suite récurrente linéaire : vous connaissez des techniques pour calculer
directement le n-ième terme. Mais ces techniques, appliquées à l’informatique, font utiliser des float et donc
potentiellement perdre en précision (en fait, avec le théorème des accroissements finis on réussit à maîtriser
l’erreur... mais ce n’est pas le sujet ici).
Vous aurez éventuellement besoin d’augmenter le niveau de récursion autorisé par Python :
1 import sys
2 sys.setrecursionlimit(10000)
B) En partant du bas
Exercice 3
Écrire un algorithme itératif (c’est-à-dire une boucle) qui calcule un « du bas vers le haut », donc en partant
de u0 et u1 . Donner la complexité de cet algorithme.
1
TP Récursivité
Dictionnaire. Pour l’exercice suivant, vous aurez besoin d’une structure de donnée appelée dictionnaire.
Une liste L est un ensemble ordonné d’éléments auxquels on accède via leur indice : L[i].
Un dictionnaire suit le même principe, mais au lieu d’un indice, on utilise une clef que l’on définit soi-même :
c’est un semble de paires clef : valeur. Un exemple en forme d’annuaire :
mesNum = {’Ariane’: 0620, ’Pierre’: 0720} Analogue de L = [2, 4, 1].
mesNum[’Ariane’] Analogue de L[i] pour une liste.
mesNum[’Thesee’] = 0454 Rentre une nouvelle clef.
’Egee’in mesNum Teste la présence d’une clef.
III) Images
Exercice 6 (Fractales : tapis de Sierpiński)
Le but de cet exercice est de tracer un Tapis de Sierpiński, dans une image carrée de côté 3n .
Le procédé est le suivant : on part d’une image noire, et on « enlève » le carré central de côté 3n−1 . Et ainsi
de suite :
Vous utiliserez une fonction récursive, des boucles, du découpage en tranches (« slicing »).
Pour éviter que Python lisse l’affichage on fixe le paramètre interpolation à ’none’ :
plt.imshow(a, interpolation=’none’)
S’il existe, on note k le plus petit entier tel que l’on ait 0 6 k 6 m et |uk | > M .
On définit alors la fonction f par (
k si k existe
f : x 7→
m + 1 sinon
1) Coder f .
2) Tracer l’allure de la courbe représentative de la fonction f sur [−2, 2], en créant une liste LX de 401
valeurs équiréparties entre −2 et 2 inclus.
3) Construire le tableau des valeurs f (x + iy) où x prend 101 valeurs comprises entre −2 et 0.5 et y prend
101 valeurs entre −1.1 et 1.1.
On rappelle que le nombre complexe i est représenté par 1j. Par exemple, le complexe 1 + 2i est
représenté par 1+2j, le complexe 1 + i par 1+1j.
4) Tracer l’image que code ce tableau. Quels paramètres peut-on modifier pour obtenir une meilleure
résolution ?
http://www.normalesup.org/~dconduche/informatique/PC/TP/motif.png
2
TP Récursivité
Le but de cet exercice est de remplir une zone blanche de l’image, sans dépasser la ligne noir : remplir soit
l’intérieur soit l’extérieur du contour.
1) Écrire une fonction chargeImage qui charge l’image dans un tableau NumPy.
2) Bien que l’image soit petite, il faut augmenter le niveau de récursion autorisé par Python (cf le début
du TP Fibonacci).
Écrire une fonction récursive remplissage qui prend en argument les coordonnées d’un pixel. (sup-
posé blanc) et qui rempli la zone blanche qui contient le pixel, de proche en proche : la fonction colorie
le pixel de départ, puis regarde si les pixels adjacents sont blanc ou noir, colorie les pixels blancs, et
ainsi de suite.