Lycée La Martinière Monplaisir
Informatique Commune 2eannée Fonctions récursives : exercices
Fonctions récursives : exercices
Judicaël Courant 2018-W36-2
5.11 Correction et terminaison de la fonction briques.
5.13 Terminaison de la fonction f91.
5.14 Complexité en temps et en espace de la fonction puissance (naïve).
5.15 Complexité en temps et en espace de la fonction puissance_rapide.
5.21 PGCD itératif. Correction et terminaison.
5.24 Fibonacci, version naïve récursive. Complexité ? 5.25 PGCD récursif. Correction et terminaison.
5.29 Flocon de Von Koch (utilise le module turtle, comportant les procédures forward, left et right, dont au trouvera une documentation ci-dessous et au verso).
Auxquels s’ajoutent deux défis :
Exercice 5.11 montrer que le temps de calcul de briques(n) est (asymptotiquement) au moins exponentiel en n, c’est-à-dire qu’il existe une constante
α, avec α >1, tel que ce temps soit un Ω(α
n), autrement dit en plus de cette constante il existe une constante
K >0 et un rang
n0tels que pour tout
n≥n0, le temps de calcul de briques(n) est au moins
K·αn.
Exercices 5.21 / 5.25 quelle est la complexité du calcul de ce PGCD (en nombre d’opé- rations effectuées) ?
Livre 16 septembre 2013 11:02 Page 380 ☛
✡✟
✠
☛✡✟
✠ ☛
✡
☛✡✟
✠ 380 Informatique pour tous
B.2.3 Écriture dans une image
On dispose ensuite d’une fonction qui permet de créer une image à partir du tableau de ses pixels :
In [10]:mbnew= Image.fromarray(mbtab)
Enfin, pour enregistrer une image, on utilise la méthodesave. L’extension donnée au nom du fichier détermine le format d’enregistrement, qui n’est pas forcément le même que celui de l’image d’origine :
In [11]:mbnew.save('luigi.jpg')
On consultera bien entendu la documentation en ligne deImagepour découvrir d’autres fonctions.
Exercice B.6Écrire une fonction qui ouvre une image et compte le nombre de pixels parfaitement noirs et de pixels parfaitement blancs dans celle-ci.
Exercice B.7Écrire une fonction qui ouvre une image et en enregistre une copie agrandie d’un facteur 2, en hauteur comme en largeur. Chaque pixel de l’image originelle est donc remplacé par quatre pixels identiques.
Exercice B.8 Écrire une fonction qui ouvre une image et affiche l’image symétrique par rapport à un axe vertical.
Même question en faisant subir cette fois à l’image une rotation de 90°.
Exercice B.9 Écrire une fonction qui prend pour arguments deux entiersnetpet crée l’image d’un damier de dimensionsn×p: les pixels sont alternativement noirs et blancs le long des lignes comme le long des colonnes.
B.3 Utilisation du module graphique turtle
Le moduleturtlesert à réaliser des tracés géométriques à l’aide d’un curseur appelétor- tue, comme dans le célèbre langage Logo mis au point en 1967 par Wally Feurzeig et Seymour Papert pour la première utilisation d’ordinateurs à des fins éducatives.
La tortue est symbolisée par une flèche, dispose d’un crayon et d’une « tête » qui fixe sa direction. Partout où elle passe, la tortue trace un trait si son crayon est baissé. Elle effectue les tracés suffisamment lentement pour que le programmeur puisse suivre la suite d’ins- tructions au fur et à mesure qu’elles s’exécutent. On dispose d’un ensemble d’instructions élémentaires pour déplacer la tortue ou tourner sa tête :
Judicaël Courant - 2018-W36-2 1/2 Document sous licence Art Libre (http://artlibre.org)
Lycée La Martinière Monplaisir
Informatique Commune 2eannée Fonctions récursives : exercices
Livre 16 septembre 2013 11:02 Page 381 ☛
✡✟
✠
✟✠ ☛
✡✟
✠
☛✡✟
✠
B – Compléments sur les entrées/sorties 381
Les fonctions du moduleturtle(tortue Logo) reset() Effacer le dessin
goto(x,y) Aller au point de coordonnéesx, ysans tourner la tête forward(distance) Avancer d’une distance donnée
backward(distance) Reculer d’une distance donnée up() Lever le crayon (pour ne plus dessiner) down() Baisser le crayon (pour dessiner)
left(angle) Tourner la tête à gauche d’un angle exprimé en degrés right(angle) Tourner la tête à droite d’un angle exprimé en degrés
Toutes ces instructions sont à précéder du nom du module, qu’on aura donc intérêt à char- ger sous la formeimport turtle as t. On peut aussi taperfrom turtle import*pour utiliser ces instructions directement sans préfixe. Des fonctions plus avancées sont disponibles, que l’on retrouvera sur la documentation en ligne du module.
Pour que la fenêtre de tracé ne se bloque pas en fin d’exécution, il faut terminer le pro- gramme par l’instructiont.mainloop().
Le programme suivant produit le dessin figureB.1.
import turtle ast t.forward(100) t.left(120) t.forward(50) t.up()
t.goto(-50,-25) t.down() t.goto(0,-60) t.mainloop()
Figure B.1 Un tracé à l’aide du moduleturtle
Judicaël Courant - 2018-W36-2 2/2 Document sous licence Art Libre (http://artlibre.org)