Scala 为什么在这个递归函数中输出这些值?
在下面的函数(在Scala工作表中运行)中,我为什么要接收sum(ys)的输出 如何计算值0、1、0等Scala 为什么在这个递归函数中输出这些值?,scala,Scala,在下面的函数(在Scala工作表中运行)中,我为什么要接收sum(ys)的输出 如何计算值0、1、0等 def sum(xs: List[Int]): Int = xs match { case Nil => 0 case y :: ys => { println(sum(ys)) y + sum(ys) } } //> sum
def sum(xs: List[Int]): Int = xs match {
case Nil => 0
case y :: ys => {
println(sum(ys))
y + sum(ys)
}
} //> sum: (xs: List[Int])Int
sum(List(3,4,5,1)) //> 0
//| 1
//| 0
//| 6
//| 0
//| 1
//| 0
//| 10
//| 0
//| 1
//| 0
//| 6
//| 0
//| 1
//| 0
要了解发生了什么,请将您的案例陈述更改为:
case y :: ys => {
println("y: " + y + "\tys: " + ys + "\tsum(ys):" + sum(ys))
y + sum(ys)
}
您将获得以下输出:
scala> sum(List(3,4,5,1))
y: 1 ys: List() sum(ys):0
y: 5 ys: List(1) sum(ys):1
y: 1 ys: List() sum(ys):0
y: 4 ys: List(5,1) sum(ys):6
y: 1 ys: List() sum(ys):0
y: 5 ys: List(1) sum(ys):1
y: 1 ys: List() sum(ys):0
y: 3 ys: List(4,5,1) sum(ys):10
y: 1 ys: List() sum(ys):0
y: 5 ys: List(1) sum(ys):1
y: 1 ys: List() sum(ys):0
y: 4 ys: List(5,1) sum(ys):6
y: 1 ys: List() sum(ys):0
y: 5 ys: List(1) sum(ys):1
y: 1 ys: List() sum(ys):0
res0: Int = 13
您可以看到,调用空列表上的sum(ys)
会产生零个条目。请注意,您的结果是13
// Assign the result to a val
val result = sum(List(3,4,5,1))