python - 如何避免最大递归深度?
问题描述
我第一次尝试使用递归函数,但出现错误“调用 Python 对象时超出了最大递归深度”。
我最初尝试编写 Ahrens 移动平均线。我在另一个平台上找到了这个代码,我正在尝试用 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 进行学习,我的问题是我是否“正确”地使用了函数递归,或者是由于我的代码的其他部分导致的错误?
感谢您的任何帮助!
这是 DataFrame 的前 30 个元素。
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
解决方案
如果其他人正在寻找 Ahrens 移动平均线,这是我的代码:
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
推荐阅读
- c# - 实时图表 WPF 需要始终在 X 轴上显示硬编码步骤
- math - 在本地和世界坐标系中旋转
- linux - 使用 docker 启动集线器后出现“无法访问此站点”
- r - 如何在R中的不同层上运行不同的公式
- php - 为什么 wp_editor 在容器之外?
- php - 在 Laravel 费用管理器中显示文件
- javascript - webworker 导入脚本失败 (self.importScripts)
- ios - ARKit Tracking - 抵消手机移动
- mysql - 草拟查询数据时如何减少存储过程中重复的SQL语句
- c# - 如何在不使用模拟的情况下在 C# 应用程序中设置用户?