object perMissing {
def solution(A: Array[Int]): Int = {
def findMissing(i: Int, L: List[Int]): Int = {
if (L.isEmpty || L.head != i+1) {
i+1
println(i+1)}
else findMissing(i+1, L.tail)
}
if (A.length == 0) 1
else findMissing(0, A.toList.sorted)
}
solution(Array(2,3,1,5))
}
我是Scala世界的新手。我来自Python和C世界。
我们如何打印整数值,例如。用于调试?例如,如果我想在每次迭代中看到i
的值。
我使用scalac
编译代码并使用scala
运行它。
答案 0 :(得分:1)
根据findMissing
函数的签名,它应返回Int
。但是,如果查看该函数的实现,只有一个代码路径(即else
部分)返回Int
- 另一方面if
部分不返回任何事情(除了Unit
),因为对println
的调用是该特定代码块的最后一行。要解决此问题,只需将增加的值放在块的末尾即可返回:
def findMissing(i: Int, l: List[Int]): Int = {
val inc = i + 1
if (l.isEmpty || l.head != inc) {
println(inc)
inc
}
else findMissing(inc, l.tail)
}
由于findMissing
是尾递归的,您还可以使用@tailrec对其进行注释,以确保它将使用尾调用优化进行编译。