Рекурсивная функция: вычислить сумму ряда - Pascal
Формулировка задачи:
Нужна помощь с написанием программы(Рекурсивная функция).
Решение задачи: «Рекурсивная функция: вычислить сумму ряда»
textual
Листинг программы
function fact(n:integer):integer;
begin
if (n = 1) then
begin
fact:= 1;
exit;
end;
fact:= n * fact(n - 1);
end;
function sigma(i, n:Integer):real;
var buf:real;
begin
buf:= i * i * (i + 1) / fact(i);
if (i mod 2 = 1) then
buf:= -buf;
if (i = n) then
begin
sigma:= buf;
exit;
end;
sigma:= buf + sigma(i + 1, n);
end;
var n:Integer;
rez:real;
begin
writeln('Введите n:');
read(n);
writeln('Искомая сумма: ', sigma(1, n));
end.
Объяснение кода листинга программы
- Объявляется функция
factс одним целочисленным параметромnи возвращаемым значением типаinteger. - Внутри функции
factпроверяется, еслиnравно 1, то устанавливается значение дляfactравным 1 и происходит выход из функции. - В противном случае переменной
factприсваивается значениеnумноженное на результат вызова функцииfactс аргументомn - 1. - Объявляется функция
sigmaс двумя целочисленными параметрамиiиnи возвращаемым значением типаreal. - Внутри функции
sigmaобъявляется переменнаяbufтипаreal. - В переменную
bufзаписывается значениеi * i * (i + 1) / fact(i). - Если остаток от деления
iна 2 равен 1, значениеbufумножается на -1. - Проверяется, если
iравноn, то устанавливается значение дляsigmaравнымbufи происходит выход из функции. - В противном случае переменной
sigmaприсваивается значениеbufплюс результат вызова функцииsigmaс аргументамиi + 1иn. - Объявляется переменная
nтипаIntegerи переменнаяrezтипаreal. - Вводится значение для переменной
n. - Выводится результат вызова функции
sigmaс аргументами 1 иn.