Как я могу избежать максимальной глубины рекурсии? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь использовать рекурсивную функцию в первый раз и получаю сообщение об ошибке «Превышена максимальная глубина рекурсии при вызове объекта Python».

Сначала я пытаюсь закодировать скользящее среднее Аренса. Я нашел код для этого на другой платформе, и я пытаюсь написать его в Python.

Вот оригинальный код в другом языке сценариев:

    IF BarIndex < Period2 THEN
    AFRV2 = Seriesv2
    ELSE
    AFRV2 = AFRV2[1] + ((Seriesv2 - ((AFRV2[1] + AFRV2[Period2]) / 2)) / Period2)

# where [1] is the previous element

И вот моя попытка:

def AhrensAverage(TimeSeries, period):
    for index, rows in TimeSeries.iterrows():
        if index < period:
            AFRV2 = rows
        else:
            AFRV2 = AFRV2 + ((rows.iloc[-1] - ((AFRV2 + AhrensAverage(TimeSeries, period)) / 2)) / period)

При вызове этой функции с DataFrame, состоящим из одного столбца, я получаю сообщение об ошибке выше. Как вы, вероятно, можете сказать, я все еще нахожусь в процессе обучения с Python, и мой вопрос: правильно ли я использую рекурсию функции или это ошибка из-за других частей моего кода?

Спасибо за любую помощь!

Это 30 первых элементов DataFrame.

0   114.4050
1   114.9425
2   115.7075
3   114.5175
4   113.4825
5   114.3150
6   115.5950
7   116.0200
8   119.1650
9   129.3700
10  131.8000
11  131.7325
12  130.6075
13  131.0800
14  131.0575
15  131.2150
16  130.4275
17  129.8875
18  130.5400
19  131.1250
20  130.9675
21  130.2025
22  129.8875
23  129.8425
24  129.1225
25  126.4025
26  127.3000
27  128.3350
28  128.2225
29  128.7625

1 Ответ

0 голосов
/ 13 апреля 2020

Если кто-то еще ищет скользящее среднее Аренса, это мой код:

def AhrensMovingAverage(source, period):
    afr = []
    for index, rows in source.iterrows():
        if index < Period:
            afr.append(rows)
        else:
            afr.append(afr[-1] + ((rows.iloc[-1] - ((afr[-1]+ afr[-Period]) / 2)) / Period))
    return afr
...