On peut décider d'avoir le dessin récursif seulement dans l'écran
DispG : le programme est plus simple car toutes les instructions
graphiques sont exécutées dans cet écran.
On appelle cette procédure carresg(a,d,f) où a est l'affixe
du sommet en bas à gauche du grand carré, d est la longueur de
son côté et f donne la longueur du côté du plus petit carré.
carresg(a,d,f) renvoie 1 pour que l'on puisse vérifier que la
procédure s'est bien exécutée.
On tape :
carresg(a,d,f):={ si d>=f alors carre(a,a+d); carresg(a-d/2,d/2,f); carresg(a+i*d,d/2,f); carresg(a+d/2-i*d/2,d/2,f); carresg(a+d+i*d/2,d/2,f); fsi; retourne 1; }:;On tape : carresg(0,40,2)
On met les différentes instructions graphiques à réaliser dans une liste
L. On appelle cette procédure carres(a,d,f) où a est l'affixe
du sommet en bas à gauche du grand carré, d est la longueur de
son côté et f donne la longueur du côté du plus petit carré.
carresg(a,d,f) renvoie la liste L.
On tape :
carres(a,d,f):={ local L; si d<f alors retourne NULL fsi; L:=carre(a,a+d),carres(a-d/2,d/2,f),carres(a+i*d,d/2,f), carres(a+d/2-i*d/2,d/2,f),carres(a+d+i*d/2,d/2,f); retourne L; } :;On tape : carres(0,40,2)
On peut aussi choisir comme paramètre la profondeur n du dessin récursif au lieu de f. On tape :
carren(a,d,n):={ local L; si n=<0 alors retourne NULL fsi; L:=carre(a,a+d),carren(a-d/2,d/2,n-1),carren(a+i*d,d/2,n-1), carren(a+d/2-i*d/2,d/2,n-1),carren(a+d+i*d/2,d/2,n-1); retourne L; } :;On tape : carren(0,40,4)