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

Avec un programme récursif

On peut voir la récusivité de 2 façons :
1/ la procédure récursive spiraler(A,B,C,n)
spiraler(A,B,C,0) est le triangle(A,B,C) et
si n>0, spiraler(A,B,C,n) est formé du triangle(A,B,C) et de
spiraler(A,C,C1,n-1) avec C1=similitude(A,k,t,C).
On écrit donc :
//Le dessin obtenu a partir d'un triangle ABC direct peut 
//etre decrit de facon recursive si on a C=similitude(A,k,t,B), 
//soit  C1=similitude(A,k,t,C) :
//spiraler(A,B,C,0)=triangle(A,B,C) 
// si n>0, spiraler(A,B,C,n)=triangle(A,B,C) puis 
//spiraler(A,C,C1,n-1)
//n=nombre de triangles a construire=nombre d'appels recursifs
spiraler(A,B,C,n):={
local k,t;
k:=longueur(A,C)/longueur(A,B);
t:=angle(A,B,C);
if (n>0) {
 triangle(A,B,C);
 B:=C;
 C:=similitude(A,k,t,B);
 spiraler(A,B,C,n-1);
   } else
 triangle(A,B,C);
};
On peut écrire un programme légèrement diffèrent pour ne pas faire deux fois le même trait.
spiralers(A,B,C,0) c'est le triangle(A,B,C) si n>0, spiralers(A,B,C,n) est formé du segment(A,B), du segment(B,C) et de spiralers(A,C,C1,n-1) si C1=similitude(A,k,t,C).
On écrit donc :
//meme dessin que spiraler(A,B,C,n) 
//mais sans repasser sur le meme trait
//si on a C=similitude(A,k,t,B), soit  C1=similitude(A,k,t,C) 
//spiralers(A,B,C,0)=triangle(A,B,C) et si n>0, 
//spiralers(A,B,C,n)=segment AB et BC puis spiralers(A,C,C1,n-1)
spiralers(A,B,C,n):={
local k,t;
k:=longueur(A,C)/longueur(A,B);
t:=angle(A,B,C);
if (n>0) {
 segment(A,B);
 segment(B,C);
 B:=C;
 C:=similitude(A,k,t,B);
 spiralers(A,B,C,n-1);
   } else
 triangle(A,B,C);
};
2/ la procédure récursive spiraler1s(A,B,C,n)
spiraler1s(A,B,C,0) c'est le triangle(A,B,C) si n>0, spiraler1s(A,B,C,n) est formé du triangle(A,C(n-1),Cn) (ou des segments C(n-1)Cn et ACn si on ne veut pas repasser sur le même trait) et de spiraler(A,B,C,n-1) si C(n-1)=similitude(A,k^n,n*t,B) et Cn=similitude(A,k^n,n*t,C)=similitude(A,k,t,C(n-1)).
//meme dessin que spiraler(A,B,C,n) mais autre facon de voir 
//la recursivite spiraler1(A,B,C,0)=triangle(A,B,C) si n>0,
//spiraler1(A,B,C,n)=dernier triangle AMN et spiraler1(A,B,C,n-1)
//sans repasser sur le meme trait :
//spiraler1s(A,B,C,0)=triangle(A,B,C) et si n>0, 
//spiraler1s(A,B,C,n)=segments AN et MN et spiraler1s(A,B,C,n-1)
spiraler1s(A,B,C,n):={
local k,t;
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);
 spiraler1s(A,B,C,n-1);
   } else 
 triangle(A,B,C);
};



Documentation de giac écrite par Renée De Graeve