Coordonnées
Département d'informatique
Université du Québec à Montréal
CP 8888, Succ. Centre-ville
Montréal (Québec) H3C 3P8
Tél: 514-987-3000, #5516
Bureau: PK-4525
Courriel: blondin_masse[point]alexandre
[arobase]uqam[point]ca
À propos
J'ai complété mon doctorat en mathématiques-informatique sous la supervision des professeurs Srecko Brlek, de l'Université du Québec à Montréal, au Canada, et de Laurent Vuillon, de l'Université de Savoie, en France.
Depuis le 1er août 2014, je suis professeur adjoint à l'Université du Québec à Montréal, au Canada.
Liens utiles
- Mon profil sur Google Scholar
- Mes dépôts GitLab
- Mes dépôts Bitbucket
- Mes dépôts Github
Récursivité et fractales
[english]Le 2012-02-29 par Alexandre Blondin Massé
Selon moi, une façon intéressante d'enseigner les algorithmes récursifs est de montrer qu'il est possible de générer de beaux dessins à l'aide d'algorithmes récursifs très simples.
Dans ce but, le module Python turtle est particulièrement bien adapté.
Lorsque j'avais huit ans, je me rappelle avoir découvert la puissance de la
programmation avec LogoWriter, un langage très
simple qui permet de dessiner à l'aide des concepts de base de la programmation
: boucles, structures de contrôle, etc.
Le code qui suit permet de dessiner une plante bidimensionnelle.
from turtle import * def reset(x, y): r""" Moves the turtle to position (x, y) without drawing anything and sets the angle to 90. """ penup() setpos(x, y) pendown() setheading(90) def f(height, resolution): r""" Draws a plant of given height and given resolution. The highest the resolution is, the more detailed the plant is drawn. For instance, if the resolution is 1, then the basic plant is drawn. If the resolution is 3, then the plant presents many details. """ if resolution == 0: forward(height) else: # Drawing the bottom f(height / 3.0, resolution - 1) # Drawing the right branch right(30) f(height / 3.0, resolution - 1) penup() backward(height / 3.0) pendown() # Drawing the middle left(30) f(height / 3.0, resolution - 1) # Drawing the left branch left(30) f(height / 3.0, resolution - 1) penup() backward(height / 3.0) pendown() # Drawing the top part right(30) f(height / 3.0, resolution - 1) # Drawing parameters height = 300 # height of plants ss = ['slowest', 'slow', 'fast', 'fastest'] # speeds xs = [-240, -80, 80, 240] # x positions of plants y = -100 # y position of plants # Draw plants for i in range(4): speed(ss[i]) reset(xs[i], y) f(height, i + 1) exitonclick()
Voici ce qu'on obtient :
Le lecteur intéressé trouvera plus de détails ici.