Delphi factorial

Рекурсивным называется объект, частично состоящий или определяемый с помощью самого себя. Факториал — это классический пример рекурсивного объекта. Факториал числа n — это произведение целых чисел от 1 до n. Обозначается факториал числа п так: n…

Согласно определению:
n! = 1 х 2 х 3 х … х (n — 1) х n.

Приведенное выражение можно переписать так:
n! = n х ((n — 1) х (n — 2) х …х 3 х 2 х 1) =nx(n — 1)!

То есть, факториал числа п равен произведению числа п на факториал числа (n — 1). В свою очередь, факториал числа (n — 1) — это произведение числа (n — 1) на факториал числа (n — 2) и т. д.

Таким образом, если вычисление факториала п реализовать как функцию, то в теле этой функции будет инструкция вызова функции вычисления факториала числа (n — 1), т. е. функция будет вызывать сама себя. Такой способ вызова называется рекурсией, а функция, которая обращается сама к себе, называется рекурсивной функцией.
function factorial(n: integer): integer;
begin
if n > 1 then factorial:=n * factorial(n-1) // функция вызывает сама себя
else factorial := 1; // рекурсивный процесс закончен
end;

Обратите внимание, что функция вызывает сама себя только в том случае, если значение полученного параметра k не равно единице. Если значение параметра равно единице, то функция сама себя не вызывает, а возвращает значение, и рекурсивный процесс завершается.

Использование рекурсивной функции
unit factor_,-
interface
Windows, Messages, SysDtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForml = class(TFbrm)
Labell: TLabel;
Editl: TEdit;
Buttonl: TButton;
Label2: TLabel;
procedure ButtonlClicklSender: TObject);
private
{Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm;
implementation
{SR ‘.DFM)
// рекурсивная функция
function factorial(n: integer): integer;
begin
if n > 1then factorial := n * factorial(n-1) // функция вызывает сама себя
else factorial:= 1; // факториал 1 равен 1
end;
27.procedure TForml.ButtonlClick(Sender: TObject);
k:integer; // число, факториал которого мало вычислить
fiinteger; // значение факториала числа k
begin
k := StrToInt(Editl.Text);
f := factorial(k);
label2.сарtion: = ‘Факториал числа ‘+Edit1.Text+’ равен ‘+IntToStr(f);end;
end.
Добавлено: 05 Сентября 2013 12:53:52 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...