Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 4
з дисципліни: “Алгоритми та методи обчислень”
на тему: “ Побудова та аналіз складності рекурсивних алгоритмів. ”
Львів 2016
Мета роботи: навчитися працювати з рекурсивними функціями.
Теоретичні відомості:
Визначення рекурсії
Рекурсивними називають функції, які в процесі виконання звертаються самі до себе. Рекурсія може бути безпосередньою (пряма рекурсія) – коли з тіла функції викликається та сама функція, або посередньою (непряма рекурсія) – коли функція викликає інші функції, які безпосередньо або через треті функції звертаються до даної функції.
Здебільшого рекурсивні функції є лаконічними в записі і дають змогу наочно та стисло відобразити алгоритм розв’язання задачі. З іншого боку, рекурсивні звертання часто не легкі для сприйняття, аналізу та контролю. Вони можуть вимагати значних обсягів оперативної пам'яті і призводити до часових затримок в процесі виконання програми.
За способом реалізації рекурсивні виклики рекурсивні виклики функцій нічим не відрізняються від звичайних викликів: кожен раз створюється новий набір формальних параметрів і внутрішніх змінних програми, код функції виконується від самого початку. Результат виконання функції повертається в точку її виклику.
Виконання роботи:
Варіант 15
Завдання: Обчислити значення функції:
Лістинг програми :
#include <iostream>
using namespace std;
long double fact(int N)
{
if (N < 0)
return 0; // при введенні відємного числа, виводиться 0
if (N == 0)
return 1; // при введенні 0, виводиться 1
else
return N * fact(N - 1); // інші випадки - рекурсія
}
int main()
{
int N, n;
double k = 1;
setlocale(LC_ALL, "Rus");
cout << "Введiть число для вирахування виразу з факторiалом: ";
cin >> N;
cout << endl;
cout << "Введiть число для визначення кiлькостi iтерацiй: ";
cin >> n;
cout << endl;
if (N < 0)
{
cout << "Помилка" << endl;
}
else if (N==0)
{
cout << "Помилка" << endl;
}
else
{
for (int i = 0; i < n; i++)
{
cout << "Факторiал для числа " << N << " = " << fact(N) << endl<< endl; // fact(N) - функція для вирахування факторіалу
double b;
b = (1 - (1 / fact(N)));
b = b*b;
k = k*b;
N = N - 2;
}
}
cout << "Вiдповiдь :" << k << endl << endl;
system ("pause");
}
Результат виконання програми:
/
Рис.1 Результат виконання програми
Висновок:
На даній лабораторній роботі я ознайомилася з рекурсивними функціями.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!