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

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

def F(n):
if n > 2:
F(n // 2)
F(n - 1)
print(n)


Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова F(7). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.

Показать ответ
3334567
Подсказки (3)
  1. В каком порядке выполняются два рекурсивных вызова и команда print(n)?
  2. Сначала выполняется F(n // 2), затем F(n - 1), и только после этого выводится n. При n ≤ 2 число не выводится.
  3. Для F(7): сначала F(3), затем F(6), затем выводится 7. Последовательно раскройте F(3), F(6), F(5) и F(4).
Решение
1. При n ≤ 2 функция сразу завершается, поэтому значения 1 и 2 не выводятся.

2. Вызов F(3) сначала выполняет F(1) и F(2), затем выводит 3.

3. Вызов F(4) выполняет F(2), затем F(3), которая выводит 3, после чего выводит 4.

4. Вызов F(5) выполняет F(2), затем F(4), поэтому выводит 3, 4, 5.

5. Вызов F(6) выполняет F(3), затем F(5), поэтому выводит 3, 3, 4, 5, 6.

6. Вызов F(7) сначала выполняет F(3), затем F(6), а после этого выводит 7.
Частые ошибки
  • Выводят число до выполнения рекурсивных вызовов.
  • Учитывают значения 1 и 2, хотя условие n > 2 для них ложно.
  • Меняют порядок вызовов F(n // 2) и F(n - 1).

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

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

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

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

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

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

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

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

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