下面的递归方法将范围
之间的整数值相加 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如何返回递增的值?也许我错过了这里递归的基本原理
答案 0 :(得分:6)
通过首先计算范围[a + 1,b]的总和(通过递归调用sumInts(a + 1 , b)
)然后将a
添加到{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))))