首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环和递归展开

循环和递归展开
EN

Stack Overflow用户
提问于 2012-11-30 20:21:47
回答 1查看 621关注 0票数 4
代码语言:javascript
复制
W_t = M_t[i] if 0 <= t <= 15
W_t = ROTL_1(W_(t-3) XOR W_(t-8) XOR W_(t-14) XOR W_(t-16)) if 16 <= t <= 79

这来自SHA-1标准。在haskell中,你要做的就是编写一个递归函数来做这件事,但是为了提高效率,我想要展开整个递归。内联将不起作用,因为这可能会导致代码呈指数级膨胀。我想要写的是,生成W_0W_1W_2等行的常量,直到W_79

另一个例子是在这种情况下循环展开

代码语言:javascript
复制
For t=0 to 79:
{
    T = ROTL_5(a) + f_t(b, c, d ) + e + K_t + W_t
    e = d
    d = c
    c = ROTL_30(b)
    b = a
    a = T
}

我也想展开这个循环,以避免递归函数调用(我认为ghc不会执行这种优化)。

所以在我写这篇文章之前,我想问一下,有没有更好的方法。只想说优化在这里是非常关键的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-30 21:03:38

这是做user-controlled loop unrolling的“标准”方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13645159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档