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

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

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

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


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

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

2. Функция G(11) печатает одну «звёздочку» и вызывает F(10), так как 11>1.
G(11)→F(10)

3. Аналогично продолжается цепочка рекурсивных вызовов.
F(10)→G(7)→F(6)→G(3)→F(2)→G(−1)

4. Функция G была вызвана для аргументов 11, 7, 3 и −1. Каждый такой вызов печатает один символ, а после G(-1) рекурсия прекращается.
1+1+1+1=4
Частые ошибки
  • Не учитывать печать символа при вызове G(-1): условие проверяется только после команды print.
  • Остановить рекурсию при отрицательном аргументе G, хотя функция G всё равно успевает напечатать символ.
  • Посчитать вызовы F вместо вызовов G.

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

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

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

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

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

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

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

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

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