16

Решение: Рекурсивный алгоритм F

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

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

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

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

5 шагов
1

Для $n \leq 0$ функция завершается без вывода. Вызов $F(1)$ сначала обращается к $F(-2)$, затем выводит 1 и вызывает $F(0)$, поэтому результатом является 1.

$$F(1) \to 1$$
2

Вызов $F(2)$ сначала обращается к $F(-1)$, выводит 2, затем вызывает $F(1)$.

$$F(2) \to 21$$
3

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

$$F(4) \to 1\,4\,2\,1$$
4

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

$$F(3) \to 3\,1$$

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

$$F(7) \to 1\,4\,2\,1\,7\,3\,1$$
Ответ
1421731
1421731
так ответ выглядит в бланке

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

Выводят число $n$ до выполнения вызова $F(n-3)$.

Учитывают вызовы с аргументом $n \leq 0$, хотя они ничего не выводят.

Забывают второй рекурсивный вызов $F(n \mathbin{//} 2)$.

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

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

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

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