*** КАНАЛ ЮТЬЮБ ***
ЕГЭ по информатике -> ЕГЭ 2018 -> ЕГЭ 2018 — 11
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Паскаль:
1 2 3 4 5 6 7 8 9 | procedure F(n: integer); begin if n > 0 then begin write(n); F(n - 3); F(n div 3) end end; |
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(9). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
-
Рассмотрим алгоритм:
- В данном фрагменте программы рекурсивная процедура вызывает саму себя дважды.
- Благодаря условию, находящемуся в процедуре (if n > 0 — условие остановки рекурсии), обеспечивается выход из рекурсии и не происходит «зацикливания».
- Выполнение процедур закончится, когда в каждой из вызванных процедур выполнятся по две внутренние процедуры, и условие if n > 0 перестанет работать (т.е. когда параметр процедуры n станет <= 0).
- div — целочисленное деление, т.е., например:
5 div 2 = 2 1 div 2 = 0
F(9) 1: 9 F(6) (9 - 3 = 6) 2: 6 F(3) (6 - 3 = 3) 3: 3 F(0) (3 - 3 = 0, условие не работает) 4: F(1) (3 div 3 = 1) 5: 1 F(-2) (1 - 3 = -2, условие не работает) 6: F(0) (1 div 3 = 0, условие не работает) 7: F(2) (6 div 3 = 2) 8: 2 F(-1) (2 - 3 = -1, условие не работает) 9: F(0) (2 div 3 = 0, условие не работает) 10:F(3) (9 div 3 = 3) 11:3 F(0) (3 - 3 = 0, условие не работает) 12:F(1) (3 div 3 = 1) 13: 1 F(-2) (1 - 3 = -2, условие не работает)
Результат: 9631231
Ниже на языке программирования записаны две рекурсивные функции (процедуры): F и G.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | procedure F(n:integer); forward; procedure G(n:integer); forward; procedure F (n:integer); begin writeln('*'); if n mod 5 = 0 then G(n - 5) else F (n - 3); end; procedure G(n:integer); begin if n > 0 then F (n - 1); end; |
Сколько символов «звездочка» будет напечатано на экране при выполнении вызова F(27)?
-
Разберем алгоритм кода процедуры:
- Независимо от условия (до него), процедура F выводит на экран «звездочку». Таким образом, количество «звездочек» определяется количеством вызванных процедур F.
- Рассмотрим цепочку вызываемых процедур:
F(27) -> F(24) -> F(21) -> F(18) -> F(15) -> G(10) -> F(9) -> F(6) -> F(3) -> F(0) -> G(-5)
Результат: 9
Ниже на языке программирования записан рекурсивный алгоритм F:
1 2 3 4 5 6 7 8 9 | procedure F(n: integer); begin if n > 0 then begin F(n div 4); write(n); F(n - 1); end end; |
В качестве ответа укажите последовательность цифр, которая будет напечатана на экране в результате вызова F(5).
Результат: 1514321
ЕГЭ по информатике -> ЕГЭ 2018 -> ЕГЭ 2018 — 11