Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
50
Добавлен:
07.02.2016
Размер:
104.45 Кб
Скачать

Непряма рекурсія.

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

Розглянемо наступний приклад:

Обчислити

Складемо програму. За правилами Pascal при описі обєкта, наприклад функціїAlfa можна посилатися тільки на обєкт, який описано раніше. Це означає, що попередньо треба описати функціюBeta.Але вона в свою чергу посилається на функціюAlfa.Щоб вийти з замкнутого кола, перед функцієюAlfaописують так званий прообраз функціїBeta.Це заголовок функції з переліком всіх формальних параметрів. А щоб компілятор далі не вів пошук продовження функції, записуємо йому вказівку –директивуforward. А після опису функціїAlfaописуємо саму функціюBeta. При цьому список параметрив уже не вказують. Поняття прообразу функції (заголавків) використовують також у мові С.

Отже, отримуємо:

Var X:real;

function beta(x:real):real; forward;

function alfa(x:real):real;

begin

alfa:=beta(x)*sin(x);

end;

function beta;

begin

If abs(x)>0.01 then beta:=alfa(x/10)

else beta:=pi;

end;

begin

wite (‘введіть х=’); read(x);

writeln;

writeln(‘alfa=’,alfa(x)));

end.

Функції alfaтаbeta, викликаючи одна одну, зменшує значення змінної х до величини, меншої за 0.01, за якою припиняється дія рекурсивного виклику. За оберненої ходою отримуємо потрібнийрезультат.

Нехай x=5.

(5) = (5)*sin5;

В свою чергу (5)=(5/10)=(0.5);

Далі (0.5)=(0.5)*sin0.5;

В свою чергу (0.5)=(0.5/10)=(0.05);

І в кінці (0.05)=;

Оберненою ходою маємо:

3.14*sin0.5*sin5=-1.444

Контрольні запитання.

  1. Що таке рекурсія?

  2. Що таке глибина рекурсії?

  3. Яким чином описується рекурсивна підпрограма? Привести приклади.

  4. Що таке подвійна рекурсія:

  5. Що таке непряма рекурсія?

  6. Який вміст вкладається в поняття модульного підходу до програмування?

  7. Що мається на увазі під словами “ефект хвилі”?

  8. Що таке функціональна складність?

abc

3

1 4 2

abc

7

5 6

рис. 3.1. Алгоритм гри Ханойські вежі для n=3.

рис. 3.2. Приклад виконання функції Акермана.

Соседние файлы в папке конспект лекцій 1 паск