这个scala代码有什么问题

0 scala

这个函数应该返回列表中所有数字的总和,但是当我运行它时,我总是回来ans=0.

def sum(st: List[Int]): Int = {
  var ans=0 

  def combine(st: List[Int], ans:Int): Int = {
    if (st.isEmpty) ans else combine(st.tail, ans)        
  }
  ans
}
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

Bri*_*new 5

您需要将列表的头部添加到ans.目前你正在递归但实际上没有使用列表的头部.

例如,我认为你需要类似下面的内容,你可以将列表的头部添加到剩余部分的总和中.

scala> def sum(st: List[Int]): Int = 
     | {
     | if (st.isEmpty) {
     |    0
     | }
     | else {
     |    st.head + sum(st.tail)
     | }
     | }
sum: (st: List[Int])Int
Run Code Online (Sandbox Code Playgroud)

  • 此外,它可能有助于_call_结合:) (4认同)