Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторної роботи № 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 Результат виконання програми
Висновок:
На даній лабораторній роботі я ознайомилася з рекурсивними функціями.