Adloun

Le tracé de Sierpinski

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 6 — Fonctions récursives

É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 .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.