рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Поняття рекурсії

Поняття рекурсії - раздел Образование, РЕКУРСИВНІ АЛГОРИТМИ R   Рекурсивним Називається Об'єкт, Що Частково Складається Або В...

 

Рекурсивним називається об'єкт, що частково складається або визначається за допомогою самого себе. Рекурсія зустрічається не тільки в математиці, але й у повсякденному житті. Наприклад, картинки, що містять своє власне зображення, віршики на зразок «У попа був собака ... .» Рекурсивні визначення в математиці являють собою могутній апарат. Наприклад: натуральні числа, деякі функції.

Приклад 1. Рекурсивне визначення натуральних чисел:

а) 0 – число натуральне,

б) число, що слідує за натуральним, є натуральне число.

Приклад 2. Рекурсивне визначення функції "факторіал" n! (для ненегативних цілих чисел):

а) 0! = 1, (факторіал нуля)

б) для n > 0 : n! = n*(n – 1)!

Потужність рекурсивного визначення полягає, мабуть, у тім, що воно дозволяє за допомогою кінцевого висловлення визначити нескінченну безліч об'єктів. Аналогічно за допомогою кінцевої рекурсивної програми можна описати нескінченне обчислення, причому програма не буде містити явних повторень. Однак рекурсивні алгоритми найкраще використовувати в тих випадках, коли в розв'язуваній задачі, або в функції, що обчислюється, або структурі оброблюваних даних рекурсія вже присутня явно. У загальному вигляді рекурсивну підпрограму Р можна виразити як деяку композицію Р з безліччю операторів S і самої Р.

P ≡ P[S, P]

Для виразу рекурсивних програм необхідно і достатньо мати поняття підпрограми, оскільки вони дозволяють дати будь-якому оператору ім'я, за допомогою якого до даного оператора можна звертатися. Якщо деяка процедура Р містить явне посилання на саму себе, то її називають прямо рекурсивною. Якщо ж Р посилається на іншу процедуру Q, що містить (пряме і непряме) посилання на Р, то Р називають побічно рекурсивною. Тому по тексту програми рекурсивність не завжди явно визначна.

Як правило, із процедурою зв'язують сукупність локальних об'єктів, тобто сукупність перемінних, констант, типів і процедур, що визначені тільки в цій процедурі і поза неї не існують або не мають змісту. При кожній рекурсивній активації такої процедури породжується нова сукупність локальних зв'язаних перемінних. Хоча вони мають ті ж самі імена, що і відповідні елементи локальної сукупності попереднього "покоління" цієї процедури, та їхні значення відмінні від останніх, а будь-які конфлікти по іменах розв’язуються за допомогою правил, що визначають область дії ідентифікаторів. За цими правилами ідентифікатор завжди відноситься до самої останньої породженої сукупності перемінних. Це ж правило справедливе і для параметрів процедури, по визначенню зв'язаних із самою процедурою.

Подібно операторам циклу, рекурсивні процедури можуть приводити до обчисленням, що не закінчуються, і тому на цю проблему варто особливо звернути увагу. Очевидно, для того щоб робота коли-небудь, завершилася, необхідно, щоб рекурсивне звертання до Р управлялося б деякою умовою В, що у якийсь – то момент перестає виконуватися. Зокрема, найбільш надійний спосіб забезпечити закінчення процедури у явному вигляді. Для цього ввести в неї будь який параметр (значення), назвемо його п, і при рекурсивному звертанні до Р в якості параметра задавати nзменшене на одиницю, тобто n–1. Якщо в цьому випадку в якості умови В використовується п > 0, то закінчення гарантоване. Це положення може бути виражено двома схемами:

P(n) ≡ if n>0 then P[S,P(n – 1)]

або P(n) ≡ P[S, if n>0 then P(n – 1)].

У практичних додатках важливо переконатися, що максимальна глибина рекурсій не тільки кінцева, але і досить мала.. Справа в тім, що кожна рекурсивна активація процедури Р вимагає пам'яті для розміщення її перемінних. Крім цих локальних перемінних потрібно ще зберігати поточний стан обчислень, щоб можна було повернутися до них по закінченні нової активації. В програмному прикладі 6.1 показано фрагмент рекурсивної підпрограми rec і програми, з якої вікликається вказана підпрограма.

{===== Програмний приклад 6.1 =====}

function rec(i:byte):real;

begin temp:=0;

if i=0 then rec:=i

else temp:=temp+rec(і–1);

/* (адреса ret2) І ця адреса буде записуватися с стек */

rec:=temp;

end;

 

begin {program}

. . .

n:=rec(3);

/* (адреса ret1); Ця адреса буде записуватися с стек */

a:=n+d;

. . .

end.

Коли рекурсивна функція rec викликається з програми, на стек пишуться: параметр – 3 (при першому виклику) і адреса повернення ret1. При виконанні функції активізуються ще послідовності з 3 викликів (при наступних рекурсивних викликах). І щораз на стек пишеться параметр, що зменшується на одиницю, і адреса повернення ret2. При звертанні до функції з параметром 0 виникає умова останова, і зі стека виштовхується самий верхній запис. Управління передається до оператора за адресою ret2; обчислюється деяка а; виштовхується зі стека наступна пара записів. І так поки стік не стане пустим..

– Конец работы –

Эта тема принадлежит разделу:

РЕКУРСИВНІ АЛГОРИТМИ R

РЕКУРСИВНІ АЛГОРИТМИ R... Поняття рекурсії P Коли рекурсію використовувати не потрібно P...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Поняття рекурсії

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Коли рекурсію використовувати не потрібно
  Рекурсивні алгоритми особливо підходять для задач, де оброблювані дані визначаються в термінах рекурсії. Однак це не означає, що таке рекурсивне визначення даних гарантує безперечні

Приклади рекурсивних програм
  6.3.1. Алгоритми «Розділяй і пануй»   Мабуть, найбільш значущім і найбільш використовуваним методом проектування ефективних алгоритмів є мето

Комбінаторика: перестановки. Дано N чисел. Одержати всі можливі перестановки. Установлено, що кількість таких перестановок N!.
Нехай є числа 1, 2, 3, 4; тобто N= 4. Якщо повинні бути набори по 4 елементи, то може бути 4 різних набори з різними числами на першому місці:1***, 2***, 3***, 4***

Алгоритми з поверненням
Особливо цікаві задачі так називаного штучного інтелекту. Тут мають справу з алгоритмами, що шукають рішення не за заданими правилами, а шляхом проб і помилок. Звичайно процес проб і помилок розділ

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги