В вашем рекурсивном отношении S(n)
представляет максимальное пространство, занимаемое вызовом функции для recfunc
, где n := len(xs)
.
Рассмотрим строку кода:
return recfunc(a) + recfunc(b)
Мы могли бы переписать это как:
a_result = recfunc(a)
b_result = recfunc(b)
return a_result + b_result
... без изменения требований к пространству.
В любой момент времени нам нужно только пространство не более S(max(len(a), len(b)))
, что скажем, самое большее S(n / 2)
. Таким образом:
S(n) = S(n / 2) + ...
С другой стороны, если бы вы измеряли временную сложность с помощью рекурсивного отношения на T(n)
, то оба вызова функции выше произошли бы в некоторой точке. Поэтому мы бы сказали:
T(n) = 2 * T(n / 2) + ...