Program Primer;. Var i: Integer; описание переменных головной программы

Uses CRT;

Var i: Integer; описание переменных головной программы

Function Func_1(x: Integer): Integer; Forward; опережающее объявление функции Func_1

Function Func_2(y: Integer): Integer; описание функции

Var k: Integer; Func_2

Begin

………

k := Func_1(y); обращение к функции Func_1

………

End;

Function Func_1; описание функции

Var n: Integer; Func_1 без списка формальных

Begin параметров

……….

n := Func_2(x); обращение к функции Func_2

……….

End;

Begin основная программа

……..

i := Func_1(i); обращение к функции Func_1

…….. в основной программе

End.

Примеры:

1. Составить функцию, рекурсивно определяющую значение биномиального коэффициента при 0<m<n по формулам:

= = 1, = +

Function Binom(m, n: Word): Word;

Begin

If (m=0) Or (m=n)

Then Binom := 1 выход из рекурсии

Else Binom := Binom(m, n-1) + Binom(m-1, n-1) рекурсия

End;

2. Составить функцию, рекурсивно определяющую максимальный элемент в заданной части целочисленного массива An , начиная с k-го и до n-го элемента:

Const n = 100;

Type TArray = Array [1..n] Of Integer;

………………………………………..

Function Max_element(a: TArray; k,n: Word): Integer;

Var temp : Integer;

Begin

If (k=n)

Then Max_element := a[n]

Else

Begin

temp := Max_element(a, k+1, n);

If (a[k] > temp)

Then Max_element := a[k]

Else Max_element := temp

End;

End;

Особенности рекурсии:

· использование рекурсивной формы организации алгоритма выглядит изящнее итерационной и дает более компактный текст программы,

· недостатки рекурсии состоят в следующем:

1. если глубина рекурсии велика, то программа будет требовать во время исполнения много памяти, что может привести к переполнению стека,

2. рекурсивные алгоритмы, как правило, выполняются более медленно,

· при рекурсивном программировании велика вероятность ошибок, вынуждающих программиста к перезагрузке компьютера.

Таким образом, если у программиста есть возможность выбора между итерацией и рекурсией, то предпочтительным выбором является итерация.

В целях повышения безопасности работы рекомендуется:

· для включения проверки переполнения стека необходимо использовать директиву компилятора {S+},

· для включения проверки диапазона необходимо использовать директиву компилятора {R+},

· в начале каждой рекурсивной процедуры или функции поместить строку
If KeyPressed Then Halt.Она позволяет при зависании программы выйти из нее без перезагрузки компьютера, просто нажав любую клавишу.

 

 








Дата добавления: 2015-08-08; просмотров: 759;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.