Здравствуйте. В поисках ускорения вычисления экспоненциального скользящего среднего решил написать под это рекурсивный алгоритм. Люблю рекурсию и стараюсь чаще ее применять.
Вот, собственно код:
def get_ema(array, N: int, prev_ema: float = None):
alpha = 2 / (1 + N)
if len(array) == 1:
ema = []
ema.append(array[0] * alpha + (1 - alpha) * prev_ema)
return ema
if not prev_ema:
for_sma = array[:N]
sma = sum(for_sma) / len(for_sma)
return get_ema(array[N:], N, prev_ema=sma).append(sma)
else:
new_ema = array[0] * alpha + (1 - alpha) * prev_ema
return get_ema(array[1:], N, prev_ema=new_ema).append(new_ema)
При запуске возникает ошибка AttributeError: 'NoneType' object has no attribute 'append', указывающая на последнюю строку. Мне не понятно почему. Вроде должен вернуться список, значит append работать должен. Где я ошибся?