Написать рекурсивную функцию нахождения 13-ого элемента последовательности - Free Pascal
Формулировка задачи:
Вот никак не поддаётся! Может кто поможет с решением?
Дана последовательность, заданная формулой общего члена и известно значение x0:
n = 1, 2, 3, ...
Для следующих значений параметра a, написать рекурсивную функцию нахождения 13-го члена последовательности:
a) a = 2
b) a = 30
c) a = -10
Решение задачи: «Написать рекурсивную функцию нахождения 13-ого элемента последовательности»
textual
Листинг программы
{$mode objfpc}
uses sysutils, math;
function f(n : integer; a : double) : double;
begin
if n = 0 then
if a <= 1 then result := min(2*a, 0.95)
else if a >= 25 then result := a / 25
else result := a / 5
else
result := 4 * f(n - 1, a) / 5 + a / 5 / sqr(f(n - 1, a));
end;
var
values : array[0 .. 2] of integer = (2, 30, -10);
v : integer;
begin
for v in values do
writeln(format('a = %4d; x(13) = %7.3f', [v, f(13, v)]));
end.
Объяснение кода листинга программы
Код представляет собой программу на языке Free Pascal, которая вычисляет 13-й элемент последовательности.
- Объявление функции
f(n : integer; a : double) : double. - Проверка условия
n = 0, при котором выполняется блок кода:- Если
a <= 1, то результат вычисляется как минимальное значение из 2*a и 0.95. - Если
a >= 25, то результат вычисляется какa / 25. - В противном случае результат вычисляется как
a / 5.
- Если
- Если условие
n = 0не выполняется, то выполняется блок кода:- Результат вычисляется как 4 * f(n - 1, a) / 5 + a / 5 / sqr(f(n - 1, a)).
- Объявление переменной
values : array[0 .. 2] of integerи присвоение ей значения (2, 30, -10). - Объявление переменной
v : integer. - Цикл
for v in valuesвыполняющий следующие действия:- Вывод значения
vи значения функцииf(13, v)отформатированным выводом. Примечание: Значение 13 в функцииf(n : integer; a : double) : doubleи в циклеfor v in valuesявляется индексом для получения значения из массиваvalues.
- Вывод значения