Der "Baum des Pythagoras" ist eine
selbstähnliche Figur. Folgendes Vorgehen ist
typisch für eine programmtechnische Behandlung solcher Figuren.
  
In der Skizze erkennt man, dass auf die Katheten der roten Figur eine - in der Größe passende
- blaue bzw. grüne Figur aufgesetzt wird. Das wiederholt sich entsprechend der Rekursionstiefe
bis schließlich die Katheten alleine gezeichnet werden. | 
  | 
  | 
Bei der Konstruktion der Prozedur zeichneFigur(T,A) (T gibt die Rekursionstiefe an,
A die Größe der Figur) muss man beachten, dass die "einfache Figur" (hier eine Strecke) und die
"schwierige Figur" (hier Quadrat mit Dreieck) hinsichtlich Orientierung und Größe
zueinander passen müssen. Der nebenstehende Zeichenplan ist nicht optimiert und zeigt, dass
unter In-Kauf-Nahme von doppelt gezeichneten Strecken eine Lösung schnell gefunden werden kann. | 
Lösung in Prolog
Das ist tatsächlich das komplette Programm!
zeichneFigur(0,A):-turtle_draw(A).
zeichneFigur(T,A):-turtle_draw(A),turtle_turn(90),turtle_draw(A),turtle_turn(90),
                   turtle_draw(A),turtle_turn(90),turtle_draw(A),turtle_turn(180),
                   turtle_draw(A),turtle_turn(-53.13010235),
                   T1 is T-1,A1 is 0.8*A,zeichneFigur(T1,A1),
                   turtle_turn(-90),
                   A2 is 0.6*A,zeichneFigur(T1,A2),
                   turtle_turn(-36.86989765),turtle_draw(A),turtle_turn(90).
baum:-turtle_init,turtle_moveto(100,420),zeichneFigur(12,100).
Lösung in Delphi 
Der folgende Quelltext-Auszug zeigt den entscheidenden Kern. Natürlich ist außenherum ein
weiterer Aufwand zu treiben.
procedure TForm1.FormPaint(Sender: TObject);
  procedure zeichneFigur(t : integer; a : real);
  const
    alpha = 36.86989765;
    beta  = 53.13010235;
    tf    = 5; // Rekursionstiefe für Farbwechsel
  begin
    if t < tf then canvas.Pen.Color := clGreen
              else canvas.Pen.Color := clBlack;
    if t = 0
    then
      TW.fd(a)
    else
    begin
      TW.fd(a); TW.lt(90); TW.fd(a); TW.lt(90);
      TW.fd(a); TW.lt(90); TW.fd(a);
      TW.rt(180); TW.fd(a); TW.rt(beta);
      if t > 0
      then
        zeichneFigur(t-1,0.8*a)
      else
        TW.fd(0.8*a);
      TW.rt(90);
      if t > 0
      then
        zeichneFigur(t-1,0.6*a)
      else
        TW.fd(0.6*a);
      if t < tf then canvas.Pen.Color := clGreen
                else canvas.Pen.Color := clBlack;
      TW.rt(alpha);
      TW.fd(a); TW.lt(90);
    end;
  end;
begin
  TW.SetPos(0,-300);
  zeichneFigur(20,150);
end;
baum_des_pythagoras.zip