Пример 8.4

Листинг программы

Program Factorial; {$S+, $N+, $E+}

{Включаем контроль переполнения стека и работу сопроцессора}

var n: integer;

function Fact (n: integer):real;

var F: extended;

{Рекурсивная функция, вычисляющая n!}

begin

if n < 0 then writeln ('Ошибка в задании N')

else

if n = 0 then Fact:= 1

else

begin

F:= Fact (n-1);

Fact:= F * n;

end;

end;

begin

repeat

readln (n);

writeln ('n! = ', Fact (n));

until EOF;

end.

Напишем процедуру, которая будет бесконечно печатать некоторую фразу. Обратим внимание, если операторы переставить.

Например,

Uses crt;

Procedure pop;

Begin

Writeln ('\У попа была собака...');

Pop;

End;

Begin

Pop;

End.

Но, если в теле процедуры изменить последовательность операторов:

Например,

Uses crt;

Procedure pop;

Begin

Pop;

Writeln ('У попа была собака...');

End;

Begin

Pop;

End.

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

В нашем примере вызов копии процедуры происходит раньше, чем вызов процедуры.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: