它通过首先计算范围 [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
为简单起见,我删除了调用,并添加了括号来标记递归调用):
if(2 > 5) 0 else 2 + sumInts(2 + 1, 5)
其中,条件为false
,计算结果为
2 + sumInts(3, 5)
2 + (if(3 > 5) 0 else 3 + sumInts(3 + 1, 5))
评估为
2 + (3 + sumInts(4, 5))
2 + (3 + (if(4 > 5) 0 else 4 + sumInts(4 + 1, 5)))
评估为
2 + (3 + (4 + sumInts(5, 5)))
2 + (3 + (4 + (if(5 > 5) 0 else 5 + sumInts(5 + 1, 5))))
评估为
2 + (3 + (4 + (5 + sumInts(6, 5))))
2 + (3 + (4 + (5 + (if(6 > 5) 0 else 6 + sumInts(6 + 1, 5)))))
其中,条件为true
,计算结果为
2 + (3 + (4 + (5 + (0))))