- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想计算 RSI 函数,它给出如下:
RSI = 100 * RS / ( 1 + RS ), where RS = n_up / n_down
and n_up( t ) = ( 1 - b ) * n_up( t - 1 )
+ b * U( t ),
and n_down( t ) = ( 1 - b ) * n_down( t - 1 )
+ b * D( t ).
where U( t ) = 1 for P( t ) > P( t - 1 ) and
0 otherwise;
and D( t ) = 1 for P( t ) < P( t - 1 ) and
0 otherwise.
这是我的代码:
p <- data[,6]
rsi <- function(P,t,n)
{
U <- function(P,t)
{
if (diff(P)[t] > 0)
{
return(1)
} else {
return(0)
}
}
D <- function(P,t)
{
if (diff(P)[t] < 0)
{
return(1)
} else {
return(0)
}
}
recursive.n_up <- function(P,t,b)
{
return((1-b)*recursive.n_up(P,t-1,b) + b*U(P,t))
}
recursive.n_down <- function(P,t,b)
{
return((1-b)*recursive.n_down(P,t-1,b) + b*D(P,t))
}
b <- 2/(n+1)
rs <- function(P,t,b)
{
return(recursive.n_up(P,t,b)/recursive.n_down(P,t,b))
}
return(100*rs(P,t,b)/(1+rs(P,t,b)))
}
n <- 14
RSI <- rep(0,length(p)-1)
for (i in 1:length(RSI))
{
RSI[i] <- rsi(p,i,n)
}
print(RSI)
我收到一条错误消息:
C stack usage 7970184 is too close to
the limit
所以我想知道我的算法设计是否非常糟糕,或者在使用递归函数时是否会出现这种情况?谢谢你帮我解决这个问题。
最佳答案
虽然已知递归可能有助于以一种聪明的方式制定一些问题,但核心逻辑是,它必须有一些“底线”,递归从任何更深的潜水中停止——这是一个容易决定的点——到目前为止嵌套递归开始返回并且(正在返回第一个调用者的路上)递归返回过程将正确答案组合为从最深处出现的副作用从已知返回值的已知、容易确定的点开始的水平。
简而言之,您的算法中缺少这一点。
即使在 TimeSeries 数据的第一个历史柱上,您的代码也会尝试越来越深入(及时回溯)。
如果您正确处理这种情况,代码将停止其无限深入的成功习惯,并开始组装结果。
递归适用于一站式微积分。
递归对于重复性微积分来说是个坏主意,如果已经计算的“步骤”再次被重新计算,如果一个糟糕的值(value)重用政策强制一次又一次地重新潜入,一次又一次地回到最相同的“终点”,只是由于原始的(性能未优化)递归公式。
让我们用阶乘来展示它。
出于说明目的,使用其简单、最简单的递归形式,而所有原则都与任何更复杂的基于递归的处理相关——这个仅适用于一个 SLOC:阶乘( N ) = ( N == 1 ) ? 1 : N * 阶乘 ( N - 1 )
如果只计算一次 factorial( 15 )
,就不能反对一个词反对必须遍历整个链:
fact15 = ( 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 )
缺少任何一个步骤都会导致无法正确计算阶乘。
如果下一个任务是计算下一个 - factorial( 16 )
无视性能的实现会走同一条路来回走:
fact16 = ( 16 * 15 * 14 * 13 * 12 * 11 * 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 )
而一个聪明的、以性能为导向的实现永远不会重复马戏团的尾部,而只会增加头部:
fact16 = ( 16 * fact15 )
从不重复已经计算过的部分。
想象一下随着递归深度增长到惊人的数百、数千、数万、数十万、数百万递归步骤时这种明显差异的规模......下一次一次又一次地重复它们中的每一个然后再次。不,从不。
这是所有高性能、低延迟 TimeSeries 数据处理的核心逻辑,RSI 是您自己遇到的明显情况。
关于r - 错误 : C stack usage 7970184 is too close to the limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484114/
好吧,我对我的页面发生的事情有点困惑。我在底部有页码, table 上摆满了 23 种不同的元素。 每个页面应一次显示 5 个项目。我显示的页面发送了一个带有 pagenumber = 不管怎样的 g
几周前我开始学习 Ada。我知道 limited 在某些情况下声明了一个有限类型,不允许复制对象 来自 Ada Reference Manual 2012 7.5 1/2 A limited type
我想按 DESC 选择日期并限制为最后 3 个,然后我需要基本上翻转最后 3 个结果,以便它们按 ASC 排序 任何帮助将不胜感激,我正在使用 postgresql 最佳答案 SELECT * FRO
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
我正在尝试访问按“日期”键排序的表中恒定数量的最新文档。请注意,不幸的是,日期是被实现的(不是由我......),使得该值设置为字符串,例如“2014-01-14”,或者有时“2014-01-14 2
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我必须对我的数据应用分页。我通过复杂的连接查询获取数据,没有任何子查询,只有简单的连接。 假设这个查询[这是一个非常简单的查询,我有一个比这个复杂的查询] SELECT states.state
我经常制作条形图,并将条形图的值额外包含为注释 (geom_text)。通常,我更喜欢这些值右对齐(与将标签放在条形顶部相反)。在绘制多面条形图时,我将这些值放在每个组中的最大值(我之前计算过)加上我
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
我正在使用 PostgreSQL 9.3。这应该在具有 100,000 多行的任何表上重现。 EXPLAIN ANALYZE 显示使用 LIMIT 2 扫描了更多行,但我不明白为什么。 限制 1: E
我正在尝试找出是否可以在 PHP 中全局设置和取消设置 MySQL 结果的默认限制。 一些可能看起来像的伪代码: $pdo->prepare('SELECT * FROM example'); $pd
我有下面的代码片段表 在这里我必须对投票前 3 个值求和。 假设 product_id 3030 vote 列的总和为 8.1 和 3671 总和 是 5.2 在这里,我必须获得前 3 个 produ
我正在使用全文搜索来提取行。 我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行兰德 (RAND)。 因此,对于任何特定的搜索词
帮助创建搜索条件 SELECT * FROM mlt_adr_city WHERE name LIKE "Text%" AND region_id = 59 AND id <> 0 IF (name
MySQL 查询示例: SELECT message_id, message_text FROM messages LIMIT 0 , 30 我得到的这个提示是错误的: HIN
我注意到如果我将查询限制为 1 个而不是 5 个,速度会急剧下降。 SELECT he. * FROM homematic_events he WHERE he.homematic_devices_i
我需要从我的表中获取最后一个 ID,以便我可以在另一个函数中使用它我在我的存储库中创建了这个函数,但我没有工作,它显示了一个错误: [Syntax Error] line 0, col 60: Err
我是一名优秀的程序员,十分优秀!