Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = 2 при n < 3;
F(n) = F(n − 2) + F(n − 1) − n, если n > 2 и при этом
F(n) =F(n − 1) − F(n − 2) + 2 × n, если n > 2 и при этом
Чему равно значение функции F(32)?
Приведём программу на PascalABC, решающую данную задачу:
var n: longint;
function F(n: longint): longint;
begin
if n < 3
then F := 2
else if (((n mod 2) = 0) and (n > 2))
then F := F(n - 2) + F(n-1) - n
else if (((n mod 2) <> 0) and (n > 2))
then F := F(n - 1) - F(n - 2) + 2 * n;
end;
begin
writeln(F(32));
end.
Приведём программу на Python:
f=[0]+[2]*2+[0]*30
for n in range(3, 33):
if n%2==1:
f[n]=f[n-1]-f[n-2]+2*n
else:
f[n]=f[n-1]+f[n-2]-n
print(f[32])
Приведём другое решение на языке Python.
def F(n):
if n < 3:
return 2
if n % 2 == 0 and n > 2:
return F(n - 2) + F(n - 1) - n
if n % 2 != 0 and n > 2:
return F(n - 1) - F(n - 2) + 2 * n
print(F(32))
Результат работы программы — 3194.
Ответ: 3194.

