Задание 16 ЕГЭ по информатике · 2778CC

Количество звёздочек при взаимной рекурсииПовышеннаяКЭС 3.7КЭС 3.16
Ниже приведены две рекурсивные функции F и G на языке Python.

def F(n):
if n > 0:
G(n - 2)

def G(n):
print("*")
if n > 1:
F(n - 1)


Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(12)?

Показать ответ
4
Подсказки (3)
  1. Проследите цепочку рекурсивных вызовов, начиная с F(12). В каком случае функция G печатает звёздочку?
  2. Каждый вызов F(n) при n>0 вызывает G(n−2), а каждый вызов G(n) печатает одну звёздочку и при n>1 вызывает F(n−1).
  3. Цепочка имеет вид F(12)→G(10)→F(9)→G(7)→F(6)→G(4)→F(3)→G(1). Функция G вызывается 4 раза.
Решение
1. Вызов F(12) удовлетворяет условию n>0, поэтому вызывается G(10).
F(12)→G(10)

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

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

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

5. Количество напечатанных символов равно числу вызовов функции G.
4⋅1=4
Частые ошибки
  • Учитывать вызовы функции F как напечатанные символы.
  • Продолжать рекурсию после вызова G(1), хотя условие n > 1 ложно.
  • Ошибочно считать, что G печатает символ только при n > 1.

Источник: Открытый банк ФИПИ

Похожие задания

Нужен репетитор по информатике?

Посмотрите репетиторов, которые ведут занятия в Precettore, или оставьте заявку — подберём сами.

Репетиторы по информатике

Подбор репетитора

Напишите, что нужно, — команда Precettore подберёт репетитора и свяжется с вами.

Готовьтесь к ЕГЭ по информатике в Precettore

Варианты с автопроверкой, домашние задания от репетитора, онлайн-доска и разбор ошибок — в одном кабинете. Регистрация бесплатная.