Процедура Тик выполняет две команды говорить (первая говорит «Тик», вторая — «Так»), затем вызывает себя снова. Спрайт продол- жит говорить «Тик-Так» бесконечно, если его не остановит внешнее действие. Единственный способ остановить процедуру — кликнуть по красному значку «Стоп». То, что процедура сама себя вызывает подобным образом, дает нам возможность бесконечно повторять две команды говорить, не используя блоков-циклов. Форма рекурсии, использованная в этом примере, называется концевой, поскольку рекурсивный вызов вставлен в самом конце процедуры. В Scratch рекурсивные вызовы могут располагаться и раньше, но такой тип рекурсии мы рассматривать не будем.
Бесконечная рекурсия — в целом не лучшая идея. Стоит контролировать выполнение процедуры с помощью условных операторов. Например, процедура может включать блок если, который определяет, нужен ли рекурсивный вызов. На рисунке показана рекурсивная процедура, которая от некой первой цифры (ее задает переменная счет) считает вниз до 0.
Разберемся, как работает процедура ОбратныйСчет, если ее вызывают с аргументом 3. Когда процедура запускается, команда говорить выводит цифру 3, затем проверяет, верно ли, что переменная счет больше 0. Поскольку 3 больше 0, процедура вычтет 1 из значения переменной счет, чтобы вызвать себя саму с аргументом 2. При втором вызове процедура показывает число 2 и, поскольку 2 больше 0, еще раз вызывает себя с аргументом 1. Это будет продолжаться до тех пор, пока не будет совершен вызов ОбратныйСчет(0). Когда цифра 0 появится в облачке разговора, процедура проверит, больше ли значение перемен- ной счет, чем 0. Поскольку выражение в шапке блока если оценивается