informatique (tronc commun des prépas scientifiques) · Chapitre 6 · Exercice de TD
Le tracé de Sierpinski
Fonctions récursives · niveau 2
Énoncé
Le triangle de Sierpinski de niveau est constitué de 3 triangles de Sierpinski de niveau disposés en triangle. Implémenter ce tracé à l'aide du module turtle (cas de base : tracé d'un triangle équilatéral). Compter le nombre de triangles dessinés et le nombre d'appels.
Corrigé
Le point critique est d'assurer la restauration de la position et de l'orientation de la tortue après chaque appel :
import turtle
def sierpinski(longueur: float, n: int) -> None:
if n == 0:
for _ in range(3):
turtle.forward(longueur)
turtle.left(120)
return
sierpinski(longueur / 2, n - 1) # Triangle en bas à gauche
turtle.forward(longueur / 2)
sierpinski(longueur / 2, n - 1) # Triangle en bas à droite
turtle.backward(longueur / 2)
turtle.left(60)
turtle.forward(longueur / 2)
turtle.right(60)
sierpinski(longueur / 2, n - 1) # Triangle du haut
turtle.left(60)
turtle.backward(longueur / 2)
turtle.right(60)
Le nombre de triangles élémentaires tracés est de , et le nombre total d'appels vaut . La complexité temporelle est exponentielle, mais la profondeur de pile n'est que de .
Exercices semblables
- Fibonacci, ou l'arbre qui explose corrigé
- Les sous-listes d'une somme donnée corrigé
- Convertir une récursion en boucle corrigé
- Les tours de Hanoï corrigé
- Générer dans l'ordre du code de Gray corrigé