tp maple no13 graphisme et récursivité

Post on 05-Jan-2017

222 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

TP MAPLE no13

Graphisme et recursivite

Benjamin FavettoVincent Mercat

10 mai 2009

1 Introduction

Dans ce TP, on va presenter quelques problemes dont la solution informatique la plus simple reposesur le constat suivant : si l’on connait la valeur de la solution a l’etape n, il est tres facile d’en deduire lasolution a l’etape n+ 1, etant sous-entendu que le calcul direct de la solution a l’etape n depuis l’etape 0peut s’averer notoirement plus complique (on fera le rapprochement avec le raisonnement par recurrence,par exemple) . . .

2 Pour comprendre : le calcul de n!

L’exemple le plus simple de fonction recursive a programmer est celui de la factorielle. Programmeret comprendre ce que fait la procedure suivante

> facto:=proc(n::nonnegint)option remember;if n=0 thenreturn 1;else return n*facto(n-1);end;end proc;> facto(3);> facto(-1);

Exercice : ecrire une deuxieme procedure calculant la valeur de n!, mais cette fois-ci avec une bouclefor. Comparer les temps d’execution dans les deux cas. Que se passe-t-il si l’on enleve l’option remember ?

3 Un peu plus loin : l’exponentiation rapide

L’algorithme d’exponentiation rapide permet de calculer la valeur de xn beaucoup plus rapidementqu’en faisant n multiplications successives (concretement, il fait de l’ordre de log2 n multiplications). Ilest base sur la remarque suivante : pour n pair, il suffit de savoir calculer y

n2 avec y = x2 et pour n

impair, il suffit de calculer x.yn−1

2 . Programmer et comprendre ce que fait la procedure suivante :

> puissance:=proc(x,n)if n=1 thenreturn x;

elseif n mod 2 = 0 thenreturn puissance(x*x, n/2);

else return x*puissance(x*x,(n-1)/2);end;

end;end proc;

Observer la difference de temps d’execution avec et sans l’option remember.

1

4 Arbres fractals

Le but de cette section est d’illustrer graphiquement la puissance des fonctions recursives, en tracantdes arbres fractals. Un arbre fractal est dit fractal lorsque les branches issues du tronc sont elles-memesdes arbres en reductions. Il appartient a la categorie des objets autosimilaires (on dit d’un objet qu’il estautosimilaire ou invariant d’echelle s’il est reproduit par l’agrandissement de l’une de ses parties).

Question 1. Ecrire une procedure simili:=proc(z,r,t,c) qui renvoie l’affixe de l’image du pointd’affixe z par la similitude directe de centre c, de rapport r et d’angle t.

Le procede de construction de l’arbre est le suivant : etant donne un segment initial [A,B], que l’onappelle tronc, on deduit les k (souvent k = 2 . . . 4) branches qui partent de ce tronc par des similitudesdirectes de centre B, de rapport rk et d’angle θk. Ainsi, pour obtenir la n-eme etape de construction d’unarbre fractal, on construit le tronc, puis on lui adjoint k arbres fractals d’ordre construits en n− 1 etapesau sommet du tronc. C’est le principe d’une construction recursive !

Question 2. Ecrire une procedure recursive proc_arbre:=proc(A,B,L,t,n) ou A et B sont les af-fixes de deux points du plan, L est une liste contenant les rapports des differentes similitudes et t lesangles, et n un entier, et qui renvoie une suite de segments (donnes sous la forme [A,B] avec A et B lesaffixes des extremites) composant l’arbre au bout de n iterations du procede de construction.

Question 3. Ecrire une procedure listepoints:=proc(liste) qui prend en argument une liste desegments sous la forme [A,B] et qui renvoie la liste des coordonnees des points correspondants sous laforme [[<(A),=(A)], [<(B),=(B)]].

Question 4. Tracer les figures ci-dessus (l’arbre et la fougere). On observera en particulier l’influencedu choix des valeurs pour l’angle et le rapport des similitudes sur le trace.

Question 5. Comment modifier la procedure proc_arbre pour que les nouvelles branches issues dutronc ne partent pas forcement du sommet ?

2

top related