Рекурсия



Рекурсия -- способ описания функций или процессов через самих себя

Вероятно, ни один язык программирования не позволяет настолько просто и наглядно как в Лого показать рекурсию.

Как, например, можно нарисовать спираль? В Лого для этого достаточно написать всего-навсего:

TO Spiral :a
  If :a > 100 [Stop]
  FD :a RT 90
  Spiral :a + 5
END


Насколько красивы фрактальные кривые!

TO Hilb :n :a :h
  If :n = 0 [ STOP ] 
  RT :a 
  Hilb :n - 1 (0 - :a) :h FD :h LT :a 
  Hilb :n - 1      :a  :h FD :h
  Hilb :n - 1      :a  :h LT :a FD :h 
  Hilb :n - 1 (0 - :a) :h RT :a
END

TO Hilbert
  CG HT PU SetPos [ -160 -100 ] PD 
  SetC 55 SetPenSize 2
  Hilb 5 90 7
  SetC 9 SetPenSize 1 PU Home  ST PD 
END
; Christmas Tree.
;
; (c)1991,1996 V. Batagelj

TO XTree :d :a :n
  If :n < 1 [ Stop ]
  FD :d RT :a XTree :d / 2 :a :n - 1
  LT :a XTree :d :a :n - 1
  LT :a XTree :d / 2 :a :n - 1
  RT :a PU BK :d PD
END

TO XmasTree
  Clean HT Setc 55 Setpensize 5
  PU SetPOS [ -90  -130 ] PD  XTree 40 60 7
  PU SetPOS [ 140  -110 ] PD  XTree 30 45 5
  SetC 9 SetPenSize 1 PU Home PD 
END
; Recursive tree 
;
; (c)1991,1996 V. Batagelj

TO Pins
  SetC 25 SetPenSize 2
  FD 10 LT 30 SetPenSize 1
  Repeat 6 [ FD 10 BK 10 RT 12 ]
  SetPenSize 2 LT 42 BK 10 
  SetC 115
END

TO Trunk :n :d
  IF :n = 0 [Pins Stop]
  SetC 115
  SetPenSize 2 * :n - 1
  FD :d RT 45
  Trunk (:n - 1) :d * 0.7
  LT 45 FD :d LT 30
  Trunk (:n - 1) :d * 0.5
  RT 30 BK :d * 2
  SetPenSize 2 * :n + 1 
END

TO PineTree
  Clean HT PU SetPos [ -20 -130 ] PD
  Trunk 7 70 
  SetC 9 SetPenSize 1
END

На следующей странице -- около десятка фракталов "в одном флаконе".

fractals.html

PrevTOCNext
[Титульная страница][Макинтош][Информатика и ИТ][Лого]
Hosted by uCoz