


Код выдаёт разные значения при использовании списков и рекурсии (python). Подскажите как исправить ошибку.
Алгоритм вычисления значения функции F(n), где n – целое число, задан следующими соотношениями:
F(n) = n при n <= 1
F(n) = F(n/3) если n > 1 и делится на 3
F(n) = n + F(n + 2) при n > 1 и не делится на 3
Чему равно значение функции F(17)?
Если решать с помощью списка, то ответ 17:
f = [0]*1000
for x in range(100):
if x <= 1:
f[x] = x
if (x > 1 and (x%3 == 0)):
f[x] = f[x//3]
if (x > 1 and (x%3 != 0)):
f[x] = x + f[x+2]
print(f[17])
но если через рекурсию,то ответ 44:
def f(x):
if x<= 1:
return x
if x >1 and x%3 == 0:
return f(x//3)
if x > 1 and x % 3 != 0:
return x+f(x+2)
print(f(17))
без программирования тоже ответ 44:
F(17) = 17 + F(19) = 17 + 19 + F(21) = 17 + 19 + F(7) = 17 + 19 + 7 + F(9) = 17 + 19 + 7 + F(3) = 17 + 19 + 7 + F(1) = 17 + 19 + 7 + 1 = 44