РУҚА
16

Шешімі: Реті рекурсивных вызовов

ЕГЭ · Информатика · Тапсырма 16 · Бағдарламалау негіздері
КүрделіФИПИ933635Қысқа жауап≈ 4 минутТалдау 5 қадамЖауап сверен с ключом
Условие

Ниже записан рекурсивный алгоритм $F$. При выполнении вызова $F(8)$ определите последовательность чисел, которые будут напечатаны на экране.

Python
1def F(n):
2    if n > 0:
3        F(n - 4)
4        F(n // 2)
5        print(n)
Тапсырманы ашып, өзіңіз шешіңіз
Дальше ответЕгер әлі шешіп жатсаңыз – кеңестерден бастаңыз: олар жауапқа жетелейді, бірақ оны ашпайды.
К подсказкам

Шешімін қадамдап көрсету

5 қадам
1

При $n \leq 0$ функция ничего не выводит. При положительном $n$ сначала выполняется $F(n-4)$, затем $F(n \mathbin{//} 2)$, и только после этого выводится $n$.

2

Разберём вызов $F(1)$: оба рекурсивных вызова завершаются без вывода, затем печатается $1$.

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

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

$$F(2) \to 12$$
4

Для $F(4)$ сначала вызывается $F(0)$, затем $F(2)$, после чего печатается $4$.

$$F(4) \to 124$$

Вызов $F(8)$ дважды приводит к выводу последовательности $124$: сначала через $F(4)$, затем через $F(8 \mathbin{//} 2)=F(4)$. После этого печатается $8$.

$$F(8) \to 124\,124\,8$$
Жауап
1241248
1241248
так ответ выглядит в бланке

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

Выводят число до выполнения рекурсивных вызовов.

Учитывают вызовы с неположительным аргументом.

Забывают, что $F(4)$ вызывается внутри $F(8)$ дважды.

Закрепить приёмВ теме «Бағдарламалау негіздері» ещё 159 тапсырма — жауабымен және дәл осындай талдауымен.
Жаттығу

Тапсырманы қалай шешу керек 16 ЕГЭ, информатика

Бұл есептің талдауы келесіге бөлінген: 5 шагов: видно, откуда берётся каждое число и где теряется балл. Жауап есептеулердің жанында келтірілген, олардың орнына емес.

Задача из темы «Бағдарламалау негіздері»: в ней 160 задач, и у каждой есть такой же разбор. Тіркеу қажет емес.