ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Рекурсия и рекуррентные зависимости.
Учебные темы: Рекурсия. Рекурсивные процедуры и функции. Использование стека для организации рекурсивных вызовов.
| КЭС: | 3.7 Рекурсия. Рекурсивные процедуры и функции. Использование стека для организации рекурсивных вызовов 3.16 Динамическое программирование как метод решения задач с сохранением промежуточных результатов. Задачи, решаемые с помощью динамического программирования: вычисление рекурсивных функций, подсчёт количества вариантов, задачи оптимизации 3.17 Понятие об объектно-ориентированном программировании. Объекты и классы. Свойства и методы объектов. Объектно-ориентированный анализ. Разработка программ на основе объектно-ориентированного подхода. Инкапсуляция, наследование, полиморфизм |
| Тип ответа: | Краткий ответ |
Ответ: 1241248
Начальный вызов: F(8). Нужно записать все напечатанные числа в порядке вывода, без разделителей.
Рекурсивный вызов выполняется полностью, прежде чем программа продолжит следующую строку вызывающей процедуры. Поэтому порядок команд существенен. При завершении вызова возвращаемся к месту его вызова; уже напечатанные символы сохраняются. Одинаковые вызовы в разных местах выполняются каждый раз и не объединяются.
Процедура F: при n ≥ 1 последовательно выполняются вызов F(n − 4), затем вызов F(⌊n2⌋), затем печать n.
Запись ⌊nd⌋ означает целую часть частного. Здесь деление выполняется при положительном n, поэтому дробная часть просто отбрасывается. Такой аргумент вычисляется до начала вложенного вызова.
Обозначим S(n) — строку вывода полного вызова F(n), а ε — пустую строку. Результаты вложенных вызовов соединяются в порядке команд. Ниже отдельно записан результат каждого встречающегося аргумента; знак ⧺ означает соединение строк, а не сложение чисел. Это позволяет раскрыть рекурсию от самых коротких вызовов к исходному.
S(-3) = ε.
S(-2) = ε.
S(0) = ε.
S(1) = S(-3) ⧺ S(0) ⧺ «1» = «1».
S(2) = S(-2) ⧺ S(1) ⧺ «2» = «12».
S(4) = S(0) ⧺ S(2) ⧺ «4» = «124».
S(8) = S(4) ⧺ S(4) ⧺ «8» = «1241248».
Порядок фактической печати при обходе вызовов:
1 → 2 → 4 → 1 → 2 → 4 → 8.
Убираем разделители и получаем 1241248.
Проверка. Отдельное исполнение команд с явным стеком вызовов дало тот же порядок печати 1241248. В трассировке учтены все 15 вызовов и 7 операций печати; после каждого завершения выполнение возвращается к следующей команде, а после ложного условия пропускается только его тело.
Ответ: 1241248.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF933635.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.