0

下面的递归方法对范围之间的整数值求和

  def sumInts(a: Int, b: Int): Int = {
    if(a > b) 0
    else {
      println(a +"," + b)
      a + sumInts(a + 1 , b)
    }
   } 

所以sumInts(2 , 5) returns 14

我对 sumInts 的递归调用如何对整数范围求和感到困惑。可以文字解释这种方法是如何工作的吗?

sumInts 如何返回增量值?也许我在这里遗漏了一些基本的递归

4

1 回答 1

6

它通过首先计算范围 [a+1, b] 的总和(通过递归调用sumInts(a + 1 , b))然后将a其相加来计算范围 [a, b] 中的值的总和。

[更新]在 Scala 中,该return语句是可选的;函数返回最后计算的表达式的值。因此上面的函数体等价于

if(a > b) return 0
else {
  println(a +"," + b)
  return a + sumInts(a + 1 , b)
}

[/更新]

对于 [2, 5] 范围,它将执行以下操作(println为简单起见,我删除了调用,并添加了括号来标记递归调用):

  1. if(2 > 5) 0 else 2 + sumInts(2 + 1, 5)其中,条件为false,计算结果为
  2. 2 + sumInts(3, 5)
  3. 2 + (if(3 > 5) 0 else 3 + sumInts(3 + 1, 5))评估为
  4. 2 + (3 + sumInts(4, 5))
  5. 2 + (3 + (if(4 > 5) 0 else 4 + sumInts(4 + 1, 5)))评估为
  6. 2 + (3 + (4 + sumInts(5, 5)))
  7. 2 + (3 + (4 + (if(5 > 5) 0 else 5 + sumInts(5 + 1, 5))))评估为
  8. 2 + (3 + (4 + (5 + sumInts(6, 5))))
  9. 2 + (3 + (4 + (5 + (if(6 > 5) 0 else 6 + sumInts(6 + 1, 5)))))其中,条件为true,计算结果为
  10. 2 + (3 + (4 + (5 + (0))))
于 2012-11-18T16:27:36.223 回答