Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Розділ 11. Модульне програмування частина 1.docx
Скачиваний:
7
Добавлен:
20.08.2019
Размер:
213.82 Кб
Скачать

Лекція 8. Рекурсивні функцій. Перевантаження функцій

1. Рекурсивні функції

Рекурсією називається алгоритмічна конст­рукція, де підпрограма викликає сама себе. Рекурсія дає змо­гу записувати циклічний алгоритм, не застосовуючи команд циклу. Типовий приклад використання рекурсії — обчислення факторіала числа. Нагадаємо, що факторіал числа - це добу­ток цілих чисел від одиниці до певного заданого числа. Отже, п!=п*(п - 1) *(п - 2) *... *1. Рекурсивна властивість факто­ріала: п!=п*(п-1 )!

Приклад Скласти функцію для обчислення п! викорис­товуючи рекурсію, можна так:

long factorial (int n)

{

long fact;

if (n > 1) fact = n * faciorial(n -1);

else fact = 1;

return fact;

}

Зауваження. Оскільки навіть для невеликих чисел значення факторіала є досить великим, то у цьому прикладі для функції factorial задано тип long. Це дає змогу обчислити факторіали чисел від 1 до 16. Для визначення факторіалів чисел більших від 16 необхідно використати алгоритми „довгої арифметики".

Приклад. Рекурсивна функція обчислення суми цілих чисел від а до b має вигляд

int Suma (int a, int b)

{

іnt S;

if (a == b) S = a;

else S = b + Suma(a, b-1);

return S;

}

Зауваження Застосовуючи рекурсію, потрібно правильно складати стоп-умови, які забезпечують закінчення циклічних обчислень.

2. Перевантаження функцій.

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

Приклад. Використовуючи перевантаження функції, скласти програму для упорядкування трьох уведених даних або символьного, або цілого типу.

#include <iostream.h>

void Sort(int n1, int n2, int n3);

void Sort(char n1, char n2, char n3);

void main()

{

int i1, i2, iЗ, k;

char c1, c2, c3;

cout << "Уведіть 1 для впорядкування символів, 2 - для чисел\n”;

сіп >> к;

if (k==1)

{

cout << "Уведіть три символи";

сіn >> с1 >> с2 >> сЗ;

Sort(c1,c2, сЗ);

}

if (k == 2)

{

cout << "Уведіть три числа";

сіп >> i1 >> i2 >> iЗ;

Sort(i1,i2, iЗ);

}

}

void Sort(int n1, int n2, int пЗ)

{ int c;

if (n1 > п2) {с = п1; п1 = п2; п2 = с;}

if (п2 > пЗ) {с = п2; п2 = пЗ; пЗ = с;}

if (п1 > п2) {с = п1; п1 = п2; п2 = с;}

cout << n1 << "\t" << n2 << "\t" << nЗ;

void Sort(char n1, char n2, char пЗ)

{ char c;

if (n1 > n2) {c = n1; n1 = n2; n2 = c;}

if (n2 > n3) {c = n2; n2 = n3; n3 = c;}

if (n1 > n2) {c = n1; n1 = n2; n2 = c;}

cout << n1 << "\t" <<n2 << "\t" << n3;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]