我想在Haskell中计算以下总和:(m + i)^ n从i = m到n。到目前为止,我已经想到了这个:
sum2017 m n
|m > n = 0
|otherwise = (c + m)^n + sum2017 (m+1) n
where c = m
但问题是,由于从递归调用中分配了一个新值,c每次都会更改
答案 0 :(得分:5)
您可以将实际递归填充到本地函数中,将mysqli_real_escape_string()
绑定保留在外:
c
...当然,您可以完全省略sum2017 m = go m
where go μ n
| μ > n = 0
| otherwise = (c + μ)^n + go (μ+1) n
c = m
并在递归中使用c = m
。
这个具体的例子也很容易完成,没有任何手动递归,比如
(m + μ)^n
答案 1 :(得分:1)
在Haskell中,您希望尽可能避免显式递归。
那你做什么呢?你使用为你做的循环函数;)
sum2017 m n = sum $ ((^ n) . (+ m)) <$> [m .. n]
或者您可以使用lambda函数代替此pointfree:(\ x - &gt;(c + x)^ n)
如果您决定将本地函数设置为leftaroundabout建议,则使其自行递归,而不是全局函数:
sum2017 m = go m
where go μ n
| μ > n = 0
| otherwise = (c + μ)^n + go (μ+1) n
c = m
因为否则,它会很快失控/内存