当前位置:  开发笔记 > 编程语言 > 正文

在Haskell中的整个递归调用中维护变量

如何解决《在Haskell中的整个递归调用中维护变量》经验,为你挑选了1个好方法。

我想在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每次都会更改



1> leftaroundab..:

您可以将实际递归填充到本地函数中,将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]]

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有