Задание №16 — Рекурсия
#69797Задание №16ФИПИ
Рекурсия
Алгоритм вычисления значения функции F(n), где n — целое неотрицательное число, задан следующими соотношениями:
F(n) = n при n < 3;
F(n) = если n > 2 и при этом n чётно;
F(n) = если n > 2 и при этом n нечётно.
Чему равно значение функции F(32)?
Правильный ответ
530
Пояснение
Решение:
Аргумент 32 чётный, поэтому .
Дальше 31 нечётно, а нечётная ветка уменьшает аргумент сразу на 2. Значит вся оставшаяся цепочка идёт только по нечётным числам, и формула для чётных больше не понадобится. Упростим её:
База — . Поднимаемся шагами по 2:
| 1 | 1 |
| 3 | 4 |
| 5 | 11 |
| 7 | 22 |
| 9 | 37 |
| 11 | 56 |
| 13 | 79 |
| 15 | 106 |
| 17 | 137 |
| 19 | 172 |
| 21 | 211 |
| 23 | 254 |
| 25 | 301 |
| 27 | 352 |
| 29 | 407 |
| 31 | 466 |
Например, , , и так далее до .
Наконец .
import sys
sys.setrecursionlimit(10000)
def F(n):
if n < 3:
return n
if n % 2 == 0:
return 2 * (n - 1) + F(n - 1) + 2
return 2 * (n + 1) + F(n - 2) - 5
print(F(32)) # 530
Ответ: 530