如何解决如何通过Scala中的函数式编程编写求和函数
def f(x: Int): Int = x + 1
def sum1(n: Int): Int = {
var sum: Int = 0
for (i <- 1 to n) {
sum += i * f(i)
}
sum
}
val sum2: Int => Int = (n: Int) => (1 to n).reduce((x,y) => x * f(x) + y * f(y))
sum2函数是错误的,但我想知道如何通过使用reduce或fold来写sum1
解决方法
仅使用fold
通常更安全,因为边缘的情况已经烘焙到签名中,而reduce
在空列表上将失败(这就是为什么您需要从0而不是1开始)
那是一个很好的解决方案。但是,由于Scala是一种表达性语言,因此有很多方法可以达到相同的结果。例如,您还可以将计算f(x)
的步骤与将所有事物加在一起的步骤分开,看起来像这样
(1 to n).map(x => x * f(x)).fold(0)(_ + _)
// or using sum like jwvh suggested
(1 to n).map(x => x * f(x)).sum
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。