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 + AB2/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 :