next up previous contents index
suivant: Quelques exemples de récursivité monter: La double suite des précédent: Avec un programme iteratif   Table des matières   Index

Avec un programme récursif

Cette fois on a une seule façon de voir le dessin récursif : spiralers2(A,B,C,0) c'est le triangle(A,B,C) si n>0, spiralers2(A,B,C,n) est formé des segments ACn et C(n-1)Cn, de spiraler1s(A,B,C,n-1) puis dessegments ABn et B(n-1)Bn.
On tape :
//meme dessin que spirale2(A,B,C,n) mais en recursif 
//cette fois on a une seule facon de voir le dessin 
//(analogue a spiraler1s)
//et sans repasser sur le meme trait 
//spiralers2(A,B,C,0)=triangle(A,B,C) si n>0,
//spiralers2(A,B,C,n)=segments AN et MN et spiraler1s(A,B,C,n-1)
//et segments AQ et PQ (M=C(n-1),N=Cn,P=B(n-1),Q=Bn)
spiralers2(A,B,C,n):={
local k,t,M,N,P,Q;
k:=longueur(A,C)/longueur(A,B);
t:=angle(A,B,C);
if (n>0) {
 M:=similitude(A,k^n,n*t,B);
 N:=similitude(A,k,t,M);
 segment(M,N);
 segment(A,N);
 spiralers2(A,B,C,n-1);
 P:=similitude(A,1/k^n,-n*t,C);
 Q:=similitude(A,1/k,-t,P);
 segment(P,Q);
 segment(A,Q);
   } else 
 triangle(A,B,C);
};
On peut aussi rajouter un paramètre s supplémentaire qui donnera le sens du triangle ABC : s=1 si le triangle ABC est direct et s=-1 sinpn.
On tape :
//spiraler2s(A,B,C,1,3) + spiraler2s(A,C,B,-1,3)
//equivalent a spiralers2(A,B,C,3)
//s= signe de l'angle oriente (AB,AC) car angle(A,B,C)=val abs de cet angle 
spiraler2s(A,B,C,s,n):={
local k,t;
k:=longueur(A,C)/longueur(A,B);
t:=angle(A,B,C);
if (n>0) {
 //triangle(A,B,C);
 segment(A,B);
 segment(B,C);
 B:=similitude(A,k,s*t,B);
 C:=similitude(A,k,s*t,C);
 spiraler2s(A,B,C,s,n-1);
   } else {
 triangle(A,B,C);
}
}


Documentation de giac écrite par Renée De Graeve