№16

Примеры решений прототипа №1

Рекурсия и функции

Примеры решения

№ 5133 /dev/inf 11.22 (Уровень: Базовый)

(А. Рогов) Алгоритм вычисления значения функции F(n)F(n), где nn – натуральное число, задан следующими соотношениями:

\(F(n)=1\) при \(n<3\);
\(F(n)=F(n-1)+n-1\) если \(n > 2\) и при этом \(n\) чётно;
\(F(n)=F(n-2)+2n-2\), если \(n > 2\) и при этом \(n\) нечётно.

Чему равно значение выражения \(F(2048)-F(2045)\)?

# Решение рекурсией
from functools import cache

@cache
def f(n):
    if n &lt; 3: return 1
    if n &gt; 2 and n % 2 == 0: return f(n - 1) + n - 1
    return f(n - 2) + 2 * n - 2
for i in range(2049): f(i)
print(f(2048) - f(2045))
# Решение динамическим программированием
f = {}
for n in range(2050):
    if n &lt; 3: f[n]=1
    elif n &gt; 2 and n % 2 == 0: f[n] = f[n - 1] + n - 1
    else: f[n] = f[n - 2] + 2 * n - 2
print(f[2048] - f[2045])

← К списку шпаргалок