| Рекурсия:
В предыдущих программах
мы использовали подпрограммы-процедуры, которые
вызывались по мере необходимости.Теперь же
поговорим о процедуре, которая называется рекурсией.Суть
рекурсии заключается в том, что в ходе ее
выполнения процедура сама вызывает себя.
Заметим, что такая
возможность имеется далеко не во всех языках
програмирования. К примеру Бейсик рекурсии не
имеет. А в Logo - это наиболее употребляемый прием.
Проследим движение
"ч" по квадратной орбите. Для этого будем
использовать рекурсивную процедуру с параметром
(размера стороны). Необходимо проследить, чтобы
"ч" не вышла за пределы экрана.
Запишем процедуру "ОРБИТА":
ТО ОРБИТА :S
FORWARD :S
RIGHT 90
IF :S = 150 [STOP]
[:S = :S + 2
ОРБИТА
:S]
END
ОРБИТА 10 |

|
Мы можем легко
менять размер орбиты, меняя параметр :S. Если же
ввести параметр угла :U, то можно легко менять
также и ее вид.
ТО ОРБИТА :S :U
FORWARD :S
RIGHT :U
ОРБИТА :S
:U
END
ОРБИТА 10 200
ОРБИТА 40 150 ( 12-угольная )
ОРБИТА 40 199 ОРБИТА
20 40 ( 9-угольная )
ОРБИТА 50 200
ОРБИТА 40 144 ( 7-угольная )
Эксперементируйте, задавая нестандартные
значения переменных.
Проведем эксперимент, заменив команду FORWARD
процедурой вычерчивания какой-нибудь фигуры.
Например, квадрата (перед этим определим
процедуру "КВАДРАТ").
ТО КВАДРАТ :S
REPEAT 4
[FORWARD :S
RIGHT 90]
END
TO ЭКСП1 :S :U
KВАДРАТ :S
FORWARD :U
ЭКСП1 :S :U
END
ЭКСП1 5 5
Продолжим эксперимент.
Изменим описание процедуры ЭКСП1 так,
чтобы значение параметра :S менялось при каждом
ее выполнении:
ТО ЭКСП2
:S :U |
TO ЭКСП4
:S :U :I |
FORWARD
:S |
FORWARD :S |
RIGHT :U |
RIGHT :U |
ЭКСП2
:S + 3 :U |
ЭКСП4
(:S + :I) :U :I |
END |
END |
ЭКСП2
1 90 ЭКСП2
1 190 |
ЭКСП4
1 120 10 |
ЭКСП2
1 120 ЭКСП2
1 230 |
ЭКСП4
1 40 2 |
ЭКСП2
1 93 ЭКСП2
1 260 |
|
ЭКСП2
1 123 ЭКСП2
1 150 |
|
А теперь будем менять угол.
ТО ЭКСП3 :S :U
FORWARD :S
RIGHT :U
ЭКСП3 :S :U + 5
END
ЭКСП3 3 2
ЭКСП3 5 4
ЭКСП3 10 5
|