Частина тексту файла (без зображень, графіків і формул):
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
“КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені ІГОРЯ СІКОРСЬКОГО”
ЗВІТ
з лабораторної роботи №2
з навчальної дисципліни “Програмування складних алгоритмів”
Тема:
«Рекурсивні алгоритми»
Варіант 18
Мета: Метою лабораторної роботи є набуття практичних навичок з рекурсивними функціям.
Теоретична частина
Рекурсія — метод визначення класу чи об'єкту через попереднє задання одного чи декількох (зазвичай простих) його базових випадків чи методів, а потім заданням на їхній основі правила побудови класу, який визначається.
Іншими словами, рекурсія — часткове визначення об'єкта через себе, визначення об'єкта з використанням раніше визначених. Рекурсія використовується, коли можна виділити самоподібність задачі.
Термін «рекурсія» використовується в різних спеціальних галузях знань — від лінгвістики до логіки, але найширше застосування знаходить у математиці та інформатиці. У математиці та інформатиці рекурсія пов'язана з методом визначення функцій: рекурсивно задана функція у своєму визначенні містить себе, зокрема, рекурсивною є функція, задана рекурентною формулою. Таким чином, можна одним виразом дати нескінченний набір способів обчислення функції, визначити безліч об'єктів через саму себе з використанням раніше заданих окремих визначень. З рекурсією тісно пов'язана математична індукція: вона є природним способом доведення властивостей функцій на натуральних числах, рекурсивно заданих через свої менші значення.
Завдання до лабораторної роботи: Розробити програми згідно з алгоритмом з використанням рекурсивної функції та без використання рекурсивної функції. Оцінити час виконання та складність алгоритму.
/
Блок-схема
//
Оцінка складності
Розмір
Складність
Час виконання без рекурсії
Час виконання з рекурсією
10
O(N)
4.1e-05
8.1e-06
100
5.2e-05
2.4e-05
1000
6.6e-05
3.7e-05
Результат роботи
/
Висновок: Було написано програму, що обчислює рівняння за допомогою методу з рекурсією та без неї, а також визначає час виконання кожного з методів.
Програмний код
https://replit.com/join/tgnewlunuy-okseniait
#include <stdio.h>
#include <time.h>
#define r 5
double noRecursion(double);
double recursion(double, double);
int main(void) {
clock_t start = clock(), diff;
double d, k;
printf("r=%d\n", r);
printf("Результат обчислень без рекурсії: %.7f\n", noRecursion(1));
/*diff = clock() - start;
int msec1 = diff * 1000000 / CLOCKS_PER_SEC;
printf("\nЧас виконання: %d мікросекунд \n", msec1%1000);*/
// clock_t start = clock(), diff;
printf("Результат обчислень з рекурсією: %.7f\n", recursion(1, 0));
diff = clock() - start;
int msec1 = diff * 1000000 / CLOCKS_PER_SEC;
printf("\nЧас виконання: %d мікросекунд \n", msec1%1000);
return 0;
}
double noRecursion(double d2){
for(double k=1; k<=r; k++){
double d;
d=1/(2*k);
d2=d2*d;
}
return d2;
}
double recursion(double d, double k){
double d0;
k++;
if (k==r) return (0.5/r);
d0=(1/(2*k))*recursion(d, k);
return d0;
}
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!