Задание №16 — Рекурсия
Алгоритм вычисления значения функции F(n), где n — целое неотрицательное число, задан следующими соотношениями:
F(n) = 1 при n < 3;
F(n) = F(n - 1) - F(n - 2), если n > 2 и при этом n нечётно;
если n > 2 и при этом n чётно.
Чему равно значение функции F(39)?
Правильный ответ
41518080
Пояснение
Решение:
Здесь рекурсия опирается только на меньшие аргументы, поэтому значения удобно считать подряд, от до , складывая их в массив. База: . Для нечётного берём разность двух предыдущих значений, а для чётного — сумму всех значений от до , то есть накопленную сумму уже посчитанной части массива.
Первые значения: , , , , , . Видно, что напрямую «в лоб» рекурсию писать не стоит: чётная ветвь заново пересчитывает всю историю, поэтому либо заполняем массив снизу вверх, либо кэшируем результаты.
Продолжая таблицу до , получаем .
F = [0] * 40
F[0] = F[1] = F[2] = 1
for n in range(3, 40):
if n % 2 == 1:
F[n] = F[n - 1] - F[n - 2]
else:
F[n] = sum(F[1:n])
print(F[39]) # 41518080
Ответ: 41518080