DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Звіт з лабораторної роботи №2 з дисципліни «Програмування складних алгоритмів» на тему «Рекурсивні алгоритми»

Оригінальна назва роботи

Рекурсивні алгоритми

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
ООП
Факультет:
ЗІ
Кафедра:
Кафедра обчислювальної техніки

Інформація про роботу

Рік:
2022
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування складних алгоритмів
Група:
К
Коротко про документ

Про що ця робота

У звіті досліджено рекурсивні алгоритми та порівняно їхню ефективність з ітераційними методами. Розроблено програму на C++ для обчислення добутку ряду та проведено заміри часу виконання.

У роботі розглядаються

  • Рекурсивні алгоритми
  • Ітераційні алгоритми
  • Складність алгоритмів
  • Час виконання програм
  • Мова програмування C++
  • Порівняння рекурсії та ітерації

Зміст і розділи

  1. Мета роботи
  2. Завдання до лабораторної роботи
  3. Теоретична частина
  4. Результат
  5. Перевірка результату / Висновок
  6. Код програми
Для кого:Студенти технічних спеціальностей, викладачі програмування та алгоритмів
Викладачі:Викладач кафедри

Ключові поняття

рекурсіяітераціяскладність алгоритмуфункціястекчас виконанняC++комп'ютерна програмаумова завершення

Частина тексту файла (без зображень, графіків і формул):

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ “КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ імені ІГОРЯ СІКОРСЬКОГО” ЗВІТ з лабораторної роботи №2 з навчальної дисципліни “Програмування складних алгоритмів” На тему «Рекурсивні алгоритми» Варіант 21 Київ 2022 Мета роботи: набуття практичних навичок з рекурсивними функціями. Завдання до лабораторної роботи: Розробити програми згідно з алгоритмом з використанням рекурсивної функції та без використання рекурсивної функції. Оцінити час виконання та складність алгоритму. / Рисунок 1. Завдання для варіанту 21 Теоретична частина Рекурсiєю називається такий спосiб органiзацiї обробки даних, при якому програма (функцiя) викликає сама себе безпосередньо, або з iнших програм (функцiй). Рекурсивний алгоритм – це алгоритм, в описі якого прямо або побічно міститься звернення до самого себе. Рекурсивний метод в програмуванні – як альтернативний по відношенню до ітераційного. Основні відмінності між рекурсією та ітерацією: Рекурсивний метод містить набір інструкцій, сам виклик оператора і умову завершення, тоді як заяви ітерації містять ініціалізацію, приріст, стан, набір команд в межах циклу і керуючу змінну. Умовний оператор вирішує припинення значення рекурсії і значення змінної керування, що визначає припинення операції ітерації. Якщо метод не призводить до умови завершення, то він входить до нескінченної рекурсії. З іншого боку, якщо керуюча змінна ніколи не призводить до значення завершення, оператор ітерації повторюється нескінченно. Нескінченна рекурсія може призвести до збою системи, тоді як нескінченна ітерація споживає процесори. Рекурсія завжди застосовується до методу, тоді як ітерація застосовується до набору інструкцій. Змінні, створені під час рекурсії, зберігаються на стеку, тоді як ітерація не вимагає стека. Рекурсія викликає накладні витрати на повторне виклик функції, тоді як ітерація не має функції виклику накладних витрат. Завдяки функції, що викликає накладні витрати, виконання рекурсії відбувається повільніше, тоді як виконання ітерації відбувається швидше. Рекурсія зменшує розмір коду, тоді як ітерації роблять код довшим. Складність алгоритму (в обох випадках розраховується за формулою O(N))  n Кількість ітерацій Час виконання (в ms)  З використанням рекурсії 10 10 0.0282   50 50 0.03012   100 100 0.03095  Без використання рекурсії 10 10 0.00056   50 50 0.00263   100 100 0.00531   / Рисунок 2. Залежність часу виконання алгоритму від n Результат / Рисунок 3. Скріншот результату програми Перевірка результату / Висновок У процесі виконання лабораторної роботи набуто практичних навичок з рекурсивними функціями, розроблено програму з використанням рекурсивної функції та без використання рекурсії. Оцінено час виконання та складність алгоритму, в результаті чого зроблено висновок, що алгоритм без використання рекурсії працює швидше, однак бувають випадки, коли вирішення задачі рекурсивно простіше в плані обсягу коду та відладки. Код програми #include <iostream> #include <cmath> #include <chrono> double withRec(int i, int n, double recursion) { if(i<=n) return withRec(i+1, n, recursion * ((2*i+1)/(pow(i, 3)))); return recursion; } int main(){ int i; double f1; double f2 = 1; int n = 0; std::cout << "Задайде i, перше значення: "; std::cin >> i; std::cout << "Задайте n, останнє значення: "; std::cin >> n; if (n <= 0) std::cout << "Помилка! Введіть допустиме значення/n"; auto start = std::chrono::high_resolution_clock::now(); f1 = withRec(i, n, 1); std::chrono::duration<double, std::milli> time1 = std::chrono::high_resolution_clock::now() - start; start = std::chrono::high_resolution_clock::now(); for (int i = 1; i <= n; i++) { f2 = f2 * ((2*i+1)/(pow(i, 3))); } std::chrono::duration<double, std::milli> time2 = std::chrono::high_resolution_clock::now() - start; std::cout << "\nДобуток ряду від 1 до " << n << " по формулі (2i+1)/i^3\n"; std::cout << "Результат з використанням рекурсії: " << f1 << "\n"; std::cout << "Результат без використання рекурсії: " << f2 << "\n\n"; std::cout << "Час виконання:\n"; std::cout << "з рекурсією: " << time1.count() << "ms\n"; std::cout << "без рекурсії: " << time2.count() << "ms\n"; }
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!