Один из способов приблизиться к этому рекуррентному отношению - это rsolve
из sympy , Python символов c математическая библиотека:
from sympy import Function, rsolve, log
from sympy.abc import k, n
f = Function('f')
g = Function('g')
# T(n) = 8T(n/2) + n^2 T(1) = 1
T = f(n) - 8 * f(n / 2) - n ** 2 - 3
Tk = T.subs({n: 2 ** k, f(n): g(k), f(n / 2): g(k - 1)})
s = rsolve(Tk, g(k), {g(0): 1})
print("solution for k:", s.cancel())
print("solution for n:", s.subs({k: log(n, 2)}).simplify().cancel())
for k in range(0, 11):
print(f"k={k}, n={2 ** k}, T(n)={(17 * n ** 3 - 3) // 7 - n ** 2}")
Это выводит решение (17*n^3 - 3)/7 - n^2
. Обратите внимание, что функция определена только для n
степени 2. Первые значения для n=1,2,4,8,...
: 1, 15, 139, 1179, 9691, 78555, 632539, 5076699, 40679131, 325695195, 2606610139