td9_2h_MapleRécursiviteFractal

publicité
TD9
Calcul numérique (avec Maple)
Licence 1 SMS Math Info, Math Physique 2005-2006
Récursivité et itération
Note :
Une fonction (resp. procédure) récursive est une fonction (resp. procédure) qui se rappelle
pour se calculer. Une fonction récursive possède un cas d’arrêt qui stoppe l’appel récursif.
Question 1 : Ackerman
Soit f la fonction d’Ackerman définie par :
si x = 0
alors
f (x, y) = y+1
sinon
si y = 0
alors
f (x, y) = f (x-1, 1)
sinon
f (x , y ) = f ( x - 1, f ( x, y – 1 ) )
Ecrire la procédure Ackerman de manière récursive, qui admet deux paramètres x et y et qui
renvoie f (x,y).
Question 2 : Factorielle
Ecrire la procédure de manière itérative et récursive, qui calcule la factorielle d’une variable
n de manière récursive.
Question 3 : Pgcd
Ecrire la procédure de manière itérative et récursive, qui calcule le pgcd (sans utiliser la
commande igcd) de deux variable a et b. On utilisera la définition suivante :
pgcd(a , b) =
a
si a=b
pgcd(a-b,b) si a>b
pgcd(a,b-a) si b>a
Question 4 : Trigonométrie
On rappelle les formules trigonométriques suivantes :
sin(x) = 2 sin (x/2)cos(x/2)
cos(x) = 2 cos²(x/2) – 1
On rappelle également que lorsque l’angle x est petit (x < ) il est possible d’approcher les
fonction sin et cos comme ceci :
sin(x)  x
cos(x)  1 – x²/2
Déduire deux procédures récursives calculant le cosinus et le sinus en exploitant
l’approximation du sin et du cos lorsque x<.
Question 5 : Fractal ; Le flocon de von Koch
La définition du flocon de von Koch est la suivante :
- Le flocon d'ordre 0 est un triangle équilatéral ;
- Le flocon d'ordre 1 est ce même triangle dont les côtés sont découpés en trois et sur lequel
s'appuie un autre triangle équilatéral au milieu ;
- le flocon d'ordre n+1 consiste à prendre le flocon d'ordre n en lui appliquant la même
opération sur chacun de ses côtés.
Les flocons obtenus pour les premières valeurs de n sont :
n=1
n=0
n=2
n=3
n=4
n=5
a) Ecrire une procédure prenant deux points 2D (A et B) en argument et renvoyant le
troisième point extrémité C du triangle équilatéral ayant pour base ces deux points.
C
On rappelle la formule pour déterminer les coordonnées du point C :
 

h
AB
C = xm
ym  AB h
A
Pi/3
B
xm
d1
ym
b) Ecrire une procédure récursive prenant en argument deux points A et B (une arête du
triangle), ainsi qu'un entier n, et qui retourne la liste de points définissant le flocon de von
Koch d'ordre n entre les points A et B (c’est à dire pour l’arrête AB).
Remarque : Pa = A + AB /3
Pb = A + AB2/3
B
Ci dessous le résultat de l’appel à la procédure floconRec :
Pb
A:=[1,1]:
B:=[2,2]:
lst := [A,floconRec(A,B,1)]:
plot(lst, style=line);
Pa
A
c) Ecrire une procédure prenant en argument deux points A et B et un entier n et qui
retourne la liste de points définissant le flocon de von Koch d'ordre n pour le triangle
équilatéral A B C ; C étant le troisième point du triangle équilatéral A B C.
d) Ecrire une procédure qui à partir d’une liste de points 2D dessine un graphique reliant les
points 2D.
Remarque : Illustration du résultat à l’ordre 5 sous Maple :
Téléchargement