<h1class="alert alert-success">Récursivité - partie 2</h2>
%% Cell type:markdown id: tags:
<h2class="alert alert-info">1. Rappels sur Turtle</h2>
Turtle est un module Python permettant de dessiner sur un canevas. Le crayon est dirigé par une tortue !
Jupyter propose une implémentation de ce module (très légèrement modifié). Les commandes principales consistent à positionner la tortue, lever ou baisser le crayon (pour écrire ou non lorsque la tortue se déplace) et à commander les mouvements de la tortue (avancer/reculer, tourner à gauche/droite d'un certain angle).
Pour mieux comprendre et découvrir les commandes accessibles, étudier l'exemple de démonstration ci-dessous :
%% Cell type:code id: tags:
``` python
importturtleastt# import du module turtle dans Basthon
tt.speed(3)# vitesse moyenne (maxi = 10)
tt.penup()# lève le crayon (pour ne pas écrire pendant le déplacement)
tt.setposition(-100,100)
# origine (0, 0) au centre du cadre de dessin (dimensions 600x600)
tt.pendown()# abaisse le crayon (pour voir la trace de la tortue)
<h2class="alert alert-info">2. Fractales : courbe de Koch</h2>
La courbe de Koch est une fractale reposant sur la construction récursive suviante :
1. Étape 1 : Tracer un segment de longueur a.

2. Étape 2 : Diviser le segment en 3 parties de même longueur. Construire un triangle équilatéral ayant pour base le segment médian de la première étape, et en supprimer la base.

3. Étape 3 : Reprendre l'étape 2 sur chacun des segments créés.

4. Et ainsi de suite...

%% Cell type:markdown id: tags:
On peut construire récursivement cette courbe.
La fonction de tracer prend deux paramètres en entrée :
* la longeur $a$ du segment.
* l'étape $n$ de "profondeur" de récursivité.
Par exemple, à la profondeur $n=0$, on trace un simple segment : ceci constituera la condition d'arrêt des appels récursifs. À la profondeur $n=1$, le tracé donne la figure de l'étape 2.
%% Cell type:markdown id: tags:
<h2class="alert alert-warning">ex 1 : Dessiner avec la tortue (pas de récursivité ici) la figure correspondant à l'étape 2 (décrite ci-avant).</h2>
Écrire une fonction etape2(a) pour réaliser cette tache.
%% Cell type:code id: tags:
``` python
tt.speed(10)
defetape2(a):
# VOTRE CODE CI-DESSOUS
#...
# test:
a=50
etape2(a)
tt.done()
```
%% Cell type:markdown id: tags:
<h2class="alert alert-warning">ex 2 : Courbe de Koch : fonction récursive.</h2>
En vous inspirant de la logique du code de la fonction précédente (en la "rendant récursive"), écrire une fonction koch(a, n) récursive qui :
- prend comme paramètres un nombre entier a représentant la longueur du segment et un entier n égal au nombre de récursions souhaité.
- construit la courbe de Koch en divisant récursivement chacun des segments
*Rappel* : si n=0, le tracé est un simplement segment de longueur a.
%% Cell type:code id: tags:
``` python
tt.speed(10)
tt.penup()
tt.setposition(-300,0)
tt.pendown()
defkoch(a,n):
# VOTRE CODE CI-DESSOUS
#...
koch(360,3)
tt.done()
```
%% Cell type:markdown id: tags:
<h2class="alert alert-info">Et pour s'amuser encore un peu...</h2>