Макинтош и образование:Информатика и ИТ:Лого:Рекурсия |
Рекурсия -- способ описания функций или процессов через самих себя | |
Вероятно, ни один язык программирования не позволяет настолько просто и наглядно как в Лого показать рекурсию. Как, например, можно нарисовать спираль? В Лого для этого достаточно написать всего-навсего: 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 | |
На следующей странице -- около десятка фракталов "в одном флаконе". |