【发布时间】:2018-10-12 04:30:49
【问题描述】:
这是一个涉及factorial 的问题。对于给定的号码n,请找到以下问题的答案:
(1 / n!) * (1! + 2! + 3! + ... + n!)
Scala 中的迭代解决方案非常简单——一个简单的 for 循环就足够了。
object MyClass {
def fsolve(n: Int): Double = {
var a: Double = 1
var cum: Double = 1
for (i <- n to 2 by -1) {
a = a * (1.0/i.toDouble)
cum += a
}
scala.math.floor(cum*1000000) / 1000000
}
def main(args: Array[String]) {
println(fsolve(7)) // answer 1.173214
}
}
我想摆脱 for 循环并使用 foldLeft 操作。由于这个想法是将数字列表减少为单个结果,foldLeft 或类似的指令应该可以完成这项工作。如何?我正在努力寻找一个可以效仿的好的 Scala 示例。下面的代码说明了我正在努力实现向更惯用的 Scala 的飞跃。
object MyClass {
def fsolve(n: Int) = {
(n to 2 by -1).foldLeft(1.toDouble) (_*_)
// what comes next????
}
def main(args: Array[String]) {
println(fsolve(7))
}
}
对解决方案有任何建议或指示吗?
【问题讨论】:
标签: scala functional-programming