多列表上的Scala递归
我有一个函数,它接受两个列表并返回两个列表的总和 例如:多列表上的Scala递归,scala,recursion,Scala,Recursion,我有一个函数,它接受两个列表并返回两个列表的总和 例如: def sumOfSums(a: List[Int], b: List[Int]): Int = { var sum = 0 for(elem <- a) sum += elem for(elem <- b) sum += elem sum } 这里有两个问题: 我只在“a”列表中匹配 我尝试执行acc+h时出错,我不确定原因 问题:如何递归迭代两个列表以获得它们的总和?模式匹配两个列表: import sc
def sumOfSums(a: List[Int], b: List[Int]): Int = {
var sum = 0
for(elem <- a) sum += elem
for(elem <- b) sum += elem
sum
}
这里有两个问题:
acc+h
时出错,我不确定原因问题:如何递归迭代两个列表以获得它们的总和?模式匹配两个列表:
import scala.annotation.tailrec
def recSum(a: List[Int], b: List[Int]): Int = {
@tailrec
def recSumInternal(a: List[Int], b: List[Int], acc: Int): Int = {
(a, b) match {
case (x :: xs, y :: ys) => recSumInternal(xs, ys, x + y + acc)
case (x :: xs, Nil) => recSumInternal(xs, Nil, x + acc)
case (Nil, y :: ys) => recSumInternal(Nil, ys, y + acc)
case _ => acc
}
}
recSumInternal(a, b, 0)
}
测试:
收益率:
15
旁注:
对于这篇文章的未来读者,我假设这个问题主要是出于教育目的而提出的,因此说明了递归如何在多个列表上工作,但这绝不是一种惯用的方法。出于任何其他目的,请务必:
scala> val a = List(1,2)
a: List[Int] = List(1, 2)
scala> val b = List(3,4,5)
b: List[Int] = List(3, 4, 5)
scala> a.sum + b.sum
res0: Int = 15
<>或考虑使用诸如<代码> FordDouth,<代码> FoLDMAP < /代码>等< < /P>不能在递归之前合并列表的机制吗?还有第二个问题,那是因为您的
sumofsrumsrec
需要3个参数,而不是2个。太棒了!非常感谢
15
scala> val a = List(1,2)
a: List[Int] = List(1, 2)
scala> val b = List(3,4,5)
b: List[Int] = List(3, 4, 5)
scala> a.sum + b.sum
res0: Int = 15