【发布时间】:2017-07-07 12:14:14
【问题描述】:
这是我之前的question 的后续。
假设我想在给定的排序数组中找到一对整数,它们的总和为给定数字x。著名的“一次性”解决方案如下所示:
def pair(a: Array[Int], target: Int): Option[(Int, Int)] = {
var l = 0
var r = a.length - 1
var result: Option[(Int, Int)] = None
while (l < r && result.isEmpty) {
(a(l), a(r)) match {
case (x, y) if x + y == target => result = Some(x, y)
case (x, y) if x + y < target => l = l + 1
case (x, y) if x + y > target => r = r - 1
}
}
result
}
您如何建议在没有任何可变状态的情况下进行函数式编写?
我想我可以用Stream(Scala 中的惰性列表)编写一个递归版本
你能推荐一个非递归版本吗?
【问题讨论】:
-
这段代码不能用 Scala 编译。
-
谢谢。将尝试编译并修复它。
-
嗨@迈克尔。为你解决了这个问题。关于答案,我看到已经有很多了:)
-
为什么是非递归的?循环的纯等价物是递归。
标签: arrays algorithm scala functional-programming