РУҚА
16

Решение: Рекурсивный подсчёт звёздочек

ЕГЭ · Информатика · Задание 16 · Основы программирования
ПовышеннаяФИПИ2778CCКороткий ответ≈ 4 минутыРазбор в 5 шаговОтвет сверен с ключом
Условие

Ниже приведены две рекурсивные функции F и G. Функция F(n) вызывает G(n - 2), если n > 0. Функция G(n) печатает символ «*» и вызывает F(n - 1), если n > 1. Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(12)?

Python
1def F(n):
2    if n > 0:
3        G(n - 2)
4
5def G(n):
6    print("*")
7    if n > 1:
8        F(n - 1)
Открыть задачу и решить самому
Дальше ответЕсли ещё решаете — начните с подсказок: они ведут к ответу, но не выдают его.
К подсказкам

Решение по шагам

5 шагов
1

Вызов $F(12)$ удовлетворяет условию $n > 0$, поэтому вызывается $G(10)$.

$$F(12) \to G(10)$$
2

Функция $G(10)$ печатает одну звёздочку и вызывает $F(9)$.

$$G(10) \to F(9)$$
3

Далее рекурсивные вызовы продолжаются по цепочке: $F(9) \to G(7) \to F(6) \to G(4) \to F(3) \to G(1)$.

4

Функция $G$ вызывается при аргументах 10, 7, 4 и 1. Каждый такой вызов печатает одну звёздочку. После $G(1)$ новый вызов $F$ не выполняется, так как условие $n > 1$ ложно.

Количество напечатанных символов равно числу вызовов функции $G$.

$$4 \cdot 1 = 4$$
Ответ
4
4
так ответ выглядит в бланке

Где здесь ошибаются

Учитывать вызовы функции F как напечатанные символы.

Продолжать рекурсию после вызова G(1), хотя условие n > 1 ложно.

Ошибочно считать, что G печатает символ только при n > 1.

Закрепить приёмВ теме «Основы программирования» ещё 159 задач — с ответом и таким же разбором.
Тренироваться

Как решать задание 16 ЕГЭ, информатика

Разбор этой задачи разложен на 5 шагов: видно, откуда берётся каждое число и где теряется балл. Ответ приведён рядом с выкладками, а не вместо них.

Задача из темы «Основы программирования»: в ней 160 задач, и у каждой есть такой же разбор. Регистрация не нужна.