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

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

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

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


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

Показать ответ
5
Подсказки (3)
  1. Каждый вызов G печатает ровно один символ «*». С каким аргументом вызывается следующий F после F(n)?
  2. Цепочка аргументов вызовов функции F уменьшается на 3: F(13)→F(10)→F(7)→F(4)→F(1).
  3. Каждый из пяти вызовов F порождает вызов G, поэтому печатается по одному символу: 5 символов.
Решение
1. При вызове F(n), если n>0, выполняется вызов G(n−1). Функция G печатает одну звёздочку и при аргументе больше 1 вызывает F(n−3) относительно исходного аргумента F.
F(n)→G(n−1)→F(n−3)

2. Последовательность вызовов функций F имеет вид:
F(13)→F(10)→F(7)→F(4)→F(1)

3. Каждый из этих пяти вызовов F вызывает функцию G, которая печатает одну звёздочку. После вызова G(0) дальнейший вызов F не выполняется.
1+1+1+1+1=5
Частые ошибки
  • Учитывают только вызовы G с аргументом больше 1 и не считают вызов G(0).
  • Уменьшают аргумент следующего вызова F на 2 вместо 3.

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

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

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

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

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

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

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

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

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