我想在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每次都会更改
您可以将实际递归填充到本地函数中,将c
绑定保持在外部:
sum2017 m = go m where go ? n | ? > n = 0 | otherwise = (c + ?)^n + go (?+1) n c = m
...当然,你可以省略c = m
完全只是(m + ?)^n
在递归中使用.
这个具体的例子也可以很容易地完成而无需任何手动递归,例如
sum2017 m n = sum [(m+?)^n | ?<-[m..n]]