В тексте программы описания функций всегда следуют за разделом описания переменных и до начала основной части, как и описания процедур.

Пусть n=5, k=3. Когда в программе встречается оператор a1:=factorial(n), выполняются следующие действия:

· выделяется память для переменных, описанных в функции factorial;

· формальному параметру присваивается значение фактического: n:=n (n=5);

· выполняется функция, вычисляется факториал числа 5;

· значение функции передается в место обращения к этой функции, то есть присваивается переменной a1;

· в операторах a2:=factorial(k) a3:=factorial(n-k) еще дважды вызывается функция factorial с параметрами k=3 n-k=2.

Функция - это самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное место в памяти ЭВМ. Этим объясняется тот факт, что переменные с одинаковыми именами, используемые в функции и в основной программе, являются разными ( переменная n основной программы и параметр n функции). При выполнении программы машина «не путает» имена этих переменных, т.к. области их действия не совпадают.

 

Пример 2 :Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.

Programchisla;

Varn1, n2 : longint;

k1, k2 : byte;

Functionkol(x : longint): byte;

var k: byte;

Begin

k:=0;

While x<>0 do

Begin

Inc(k);

x:=x div 10;

end;

kol:=k;

end;

BEGIN

writeln(‘Введите два числа’); readln(n1, n2);

k1:=kol(n1);

k2:=kol(n2);

if k1=k2 Then writeln(‘одинаковое количество цифр’)

else if k1>k2 Then Writeln(‘в первом числе цифр больше’)

else writeln(‘во втором числе цифр больше’)

END.

 

 

Примеры рекурсивного программирования

 

Алгоритм, который в процессе работы обращается сам к себе, называется рекурсивным. Для иллюстрации понятия рекурсия часто приводят пример с телевизором, на экране которого изображен этот же телевизор, на экране второго - опять телевизор и так далее.

Можно разбить все рекурсивные задачи на 4 вида.