next up previous contents index
suivant: Pour définir une fonction monter: Les instructions de programmation précédent: Pour faire une boucle   Table des matières   Index

Pour faire une boucle en utilisant la récursivité

Une procédure récursive est une procédure qui s'appelle elle-même mais avec des paramètres différents et comporte un test d'arrêt qui permet d'interrompre cet appel.
On tape :
polygo(n,p,a):={ if (p!=0){ avance(a); tourne_gauche(360/n); polygo(n,p-1,a); } }
Ou on tape en utilisant si...alors...fsi au lieu de if...{...} :
polygo(n,p,a):={ si (p!=0) alors avance(a); tourne_gauche(360/n); polygo(n,p-1,a); fsi; }
Ou on tape une procédure non récursive en utilisant repete :
polygo(n,p,a):=repete(p,avance(a),tourne_gauche(360/n))
Puis on tape :
polygo(6,4,20)
On obtient :
Les 4 cotés d'un hexagone de côtés 20
On veut faire une suite de n triangles équilatèraux : le premier a pour côtés a, le deuxième a pour sommet les milieux des cotés du premier triangle etc ... On suppose que la tortue a comme position de départ : un sommet du premier triangle et est dirigée selon un coté et que les triangles sont situés sur sa droite (si vous choisissez les triangles sont situés sur sa gauche, il suffira de changer les tourne_droite en tourne_gauche et vice-versa). On choisit la même position comme position d'arrivée.
Voici deux procédures récursives.
On dessine le premier triangle, puis on place la tortue à l'endroit où il faut être pour faire l'appel récursif, on fait l'appel récursif, et on ramene la tortue à sa position de départ.
On tape par exemple :
tria(n,a):={ if (n!=0){ repete(3,avance(a),tourne_droite(120)); avance(a/2); tourne_droite(60); tria(n-1,a/2); tourne_gauche(60); avance(-a/2); } }
Ou on commence à dessiner le début du premier triangle, puis on place la tortue à l'endroit où il faut être pour faire l'appel récursif, on fait l'appel récursif, puis on finit de dessiner le premier triangle et on ramene la tortue à sa position de départ.
On tape :
tria(n,a):={ if (n!=0){ avance(a/2); tourne_droite(60); tria(n-1,a/2); tourne_gauche(60); avance(a/2); tourne_droite(120); repete(2,avance(a),tourne_droite(120));}}
Puis on tape :
tria(5,100)
On obtient :
5 triangles équilatèraux, le deuxième triangle a pour sommet les milieux des cotés du premier triangle etc ...


next up previous contents index
suivant: Pour définir une fonction monter: Les instructions de programmation précédent: Pour faire une boucle   Table des matières   Index
Documentation de giac écrite par Renée De Graeve