Пусть 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: Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, в каком из двух данных чисел больше цифр.
|
|
Program chisla;
Var n1, n2: longint;
k1, k2: byte;
Function kol(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 вида.