Перейти до змісту

ЛР15. Рекурсія і стек викликів

Коротко про роботу

Рекурсивна функція підсумовує суфікс послідовності, переходячи до наступного індексу. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Рекурсивна функція підсумовує суфікс послідовності, переходячи до наступного індексу.

Перша комірка зошита лише показує значення вашого STUDENT_X разом із типами. Вона не оголошує і не створює предметні змінні. У коді кожного завдання перенесіть потрібні значення та самостійно оголосіть/створіть відповідні змінні.

2. Що треба знати

Робота виконується після Л1–Л8. Потрібні поняття:

  1. рекурсія
  2. базовий випадок
  3. стек викликів
  4. повернення результату

Межа матеріалу

Використовуйте поняття, вивчені до Л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. Терміни і правила

Терміни

  • базовий випадок — вхід, для якого рекурсивна функція повертає результат без нового рекурсивного виклику.
  • стек викликів — ланцюжок активних викликів функцій, які ще не завершилися.

Правила

  1. Рекурсивна функція отримує values і поточний індекс.
  2. Базовий випадок настає, коли індекс дорівнює values.size(); цей виклик також входить до call_count.
  3. sum_result — сума елементів від start_index до кінця послідовності.
  4. max_depth — найбільша кількість одночасно активних викликів, включно з кадр базового випадку.

5. Завдання

Завдання 1

Для короткого прикладу запишіть послідовність рекурсивних викликів, їхню глибину та повернені значення.

Завдання 2

Реалізуйте рекурсивну суму від start_index до кінця values. Результат запишіть у sum_result.

Завдання 3

Порахуйте всі виклики у call_count і найбільшу глибину у max_depth.

6. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Назва PDF: LR15_Прізвище_Група_VNN.pdf.