Частина тексту файла (без зображень, графіків і формул):
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ
“КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ
імені ІГОРЯ СІКОРСЬКОГО”
ЗВІТ
з лабораторної роботи №2
з навчальної дисципліни “Програмування складних алгоритмів”
Варіант №3
Тема: Рекурсивні алгоритми.
Мета роботи: Метою лабораторної роботи є набуття практичних навичок з рекурсивними функціями.
Методичні вказівки
Лабораторна робота спирається на знаннях отриманих при вивченні наступних питань лекції:
– Поняття рекурсії.
– Поняття прямої i непрямої рекурсiї.
Завдання до лабораторної роботи: Розробити програми згідно з алгоритмом з використанням рекурсивної функції та без використання рекурсивної функції. Оцінити час виконання та складність алгоритму.
Завдання 3 варіанту:
/
Код завдання:
#include <stdio.h>
#include <windows.h>
double P(int n) {
if (n == 1) {
return 1.0/n;
}
else {
double y = 1.0/n * P(n-1);
return y;
}
}
//------------wirh rekursion---------------
int main(void) {
long time1, time2;
int n, z;
double y;
printf("Enter N: ");
scanf("%d", &n);
printf("How do u want to solve task? \n1.With rekursion \n2.Without rekursion\n");
scanf("%d", &z);
if (z == 1) {
time1 = GetTickCount() ;
y = P(n);
if (n > 500) {
printf("%.3000f", y);
}
else if (n > 100) {
printf("%.1000f", y);
}
else if(n > 10){
printf("%.30f", y);
}
else {
printf("%f", y);
}
time1 = GetTickCount() - time1;
printf("\nProgram was working %ld milliseconds", time1);
}
//-------------without rekursion-----------
else {
double a = 1;
time1 = GetTickCount();
for(int i = 1; i < n+1; i++) {
a = a * (1.0 / i);
}
if (n > 500) {
printf("%.3000f", a);
}
else if (n > 100) {
printf("%.1000f", a);
}
else if(n > 10){
printf("\n%.30f", a);
}
else {
printf("\n%f", a);
}
time1 = GetTickCount() - time1;
printf("\nProgram was working %ld milliseconds", time1);
}
return 0;
}
Результати:
/
/
Висновки:
Під час даної лабораторної роботи було набуто практичних навичок з рекурсивними функціями. Написано програму яка виконує завдання за допомогою рекурсії і без неї. Бачимо що по часу роботи програми методи майже не відрізняються тобто часова складність однакова. Складність алгоритму: для мене було легше рішити це завдання без рекурсії, але кожен для себе вибирає метод легший для нього