КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
До розд. 3.2) Переваги і недоліки рекурсивних визначень функцій і процедур
Додаткові відомості Питання для роздумів Фрактальна множина (фрактал), фрактальний трикутник.
Ідеї рекурсії використовуються в наукових дослідженнях уже багато століть. Рекурсивні визначення — це досить потужний інструмент наукового аналізу. Використання рекурсивних визначень у програмуванні теж буває дуже корисним і приваблює своєю красою і лаконічністю. До переваг рекурсивних визначень функцій і процедур можна віднести такі:
Основними недоліками рекурсивних визначень є:
Можна зробити такий висновок: не слід занадто захоплюватися рекурсивними визначеннями. Є мови програмування, у яких буквально все «пронизано» рекурсією. До них відносяться Лісп і Пролог. У цих мовах головне не обчислення, а обробка текстів символьної, а не числової інформації. Говорять, що на цих мовах добре вирішуються задачі штучного інтелекту. В алгоритмах для таких задач рекурсія буває іноді єдиним ефективним інструментом. Наведемо приклад, що добре ілюструє переваги і недоліки рекурсивних визначень. Приклад 3.6. Згадаємо визначення числової послідовності (ряду) Фібоначчі: «Кожен наступний член цього ряду (за винятком перших двох) дорівнює сумі двох попередніх членів. А перші два члени ряду — одиниці». Визначимо функцію Фібоначчі(N), аргументом якої є номер числа в ряді Фібоначчі, а значенням — саме це число: Ви бачите, що в цьому визначенні використовується рекурентна формула. З її допомогою легко дати визначення рекурсивної функції Фібоначчі(N):
Аналогічно можна визначити і рекурсивну процедуру, вихідним параметром якої є N-e число Фібоначчі:
Добірність і лаконічність наведених визначень не викликає сумнівів. Однак у роботі ці процедури показують себе не з кращої сторони — вони працюють дуже повільно. У багато разів швидше працюють програми, що обчислюють значення N-го числа Фібоначчі без застосування рекурсії. Інший варіант — це розрахунок за формулою:
(Формула була отримана теоретично.)
Дуже явно недоліки рекурсивних визначень чисел Фібоначчі виявляють себе в тому випадку, коли потрібно знаходити не одне N-і число, а весь ряд від 1-гo до N-го числа. І простій процедурі — рішенню немає рівних. Ряд, що складається з 30 членів, проста процедура обчислює в 1000 разів швидше, ніж програма з рекурсивним визначенням (коди 3.15 чи 3.16). Якщо ж ряд містить більш 30 членів, рекурсивна процедура на Вашому комп'ютері не візьме його зовсім, а проста процедура справиться навіть з таким, що містить 44 члена, за 0.05 сек! (Фібоначчі(44) = 701408733). Hові поняття:
Дата добавления: 2014-12-23; Просмотров: 573; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |