ЛР15. Рекурсія і стек викликів
Коротко про роботу
Рекурсивна функція підсумовує суфікс послідовності, переходячи до наступного індексу. Варіант визначає STUDENT_X.
Відкрити робочий зошит Як виконувати лабораторні
1. Умова
Рекурсивна функція підсумовує суфікс послідовності, переходячи до наступного індексу.
Перша комірка зошита лише показує значення вашого STUDENT_X разом із типами. Вона не оголошує і не створює предметні
змінні. У коді кожного завдання перенесіть потрібні значення та самостійно оголосіть/створіть відповідні змінні.
2. Що треба знати
Робота виконується після Л1–Л8. Потрібні поняття:
- рекурсія
- базовий випадок
- стек викликів
- повернення результату
Межа матеріалу
Використовуйте поняття, вивчені до Л1–Л8. Не копіюйте суфікс на кожному виклику. Передавайте послідовність і змінюйте індекс.
3. Варіант, вхідні дані та результат
У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.
Вхідні дані
| Поле | Тип | Зміст |
|---|---|---|
values |
std::vector<int> |
послідовність |
start_index |
int |
початок суфікса |
Поля результату
| Поле | Зміст |
|---|---|
sum_result |
сума суфікса |
call_count |
кількість викликів разом із базовим випадком |
max_depth |
максимальна кількість активних викликів |
Назви полів результату не змінюйте. Перша комірка лише показує значення варіанта і не оголошує предметні змінні. Перед
розв’язанням кожного завдання самостійно оголосіть потрібні вхідні змінні з показаними значеннями. Власні та результуючі
змінні також оголошуйте звичайно, як у лекційних прикладах. Обчислення виконуйте у блоці { ... }; код над блоком
використовуйте лише там, де це позначено. Наприкінці блока вже є службовий рядок самоперевірки для контрольних полів —
його не потрібно писати або змінювати. Формат std::cout обирайте за змістом завдання: спеціального формату для
самоперевірки немає.
4. Терміни і правила
Терміни
- базовий випадок — вхід, для якого рекурсивна функція повертає результат без нового рекурсивного виклику.
- стек викликів — ланцюжок активних викликів функцій, які ще не завершилися.
Правила
- Рекурсивна функція отримує
valuesі поточний індекс. - Базовий випадок настає, коли індекс дорівнює
values.size(); цей виклик також входить доcall_count. sum_result— сума елементів відstart_indexдо кінця послідовності.max_depth— найбільша кількість одночасно активних викликів, включно з кадр базового випадку.
5. Завдання
Завдання 1
Для короткого прикладу запишіть послідовність рекурсивних викликів, їхню глибину та повернені значення.
Завдання 2
Реалізуйте рекурсивну суму від start_index до кінця values. Результат запишіть у sum_result.
Завдання 3
Порахуйте всі виклики у call_count і найбільшу глибину у max_depth.
6. Перевірка і здача
- Запустіть самоперевірку та виправте помилки.
- Перезапустіть ядро і виконайте роботу ще раз від початку.
- Збережіть
.ipynbі PDF з кодом та результатами.
Назва PDF: LR15_Прізвище_Група_VNN.pdf.