РекурсияРефераты >> Кибернетика >> Рекурсия
Пример 5:
Следующая программа выдает простые числа от 1 до n, для чего используются функции next и prim, которые вызываются перекрестно, то есть рекурсивно. Одновременно это является примером применения директивы forward.
program primzahlen_rekursiv_berechnen;
{программа рекурсивного вычисления простых чисел}
var n,i : integer;
c : char;
function next(i:integer):integer;forward;
{Это прямая ссылка вперед на функцию next,
которая будет определена позже}
function prim(j:integer):boolean;
{prim имеет значение true, если j простое число,
и false в противном случае}
var k:integer;
begin
k :=2;
while (k*k <= j) and (j mod k < > 0) do
k :=next(k);
{k пробегает последовательность простых чисел, начиная с 2,
вплоть до корня из j, при этом проверяется, делится ли j на
одно из таких простых чисел. При этом используется
следующая функция next}
if j mod k = 0 then prim := false
else prim := true;
end {prim};
function next;
{Параметры уже стоят в ссылке вперед,
next вычисляет, каково следующее за j простое число}
var i:integer;
begin
1 :=i+1;
while not(prim(1)) do 1 :=1+1;
{Итак, next вызывает в свою очередь prim}
next :=1;
end {next};
begin (******* Исполняемая часть программы *******)
write(‘Введите положительное число n,’);
writeln(‘Должны быть определены все’);
writeln(‘предшествующие ему простые числа’);
readln(n);
for i :=2 to n do
begin
if prim(i) then writeln(i:14)
else writeln(i:4);
if i mod 23 = 0 then begin
write(‘<RET>’:60); read(c,c);
end;
end;
end.