下面的递归方法将一个范围之间的整数值相加
def sumInts(a: Int, b: Int): Int = {
if(a > b) 0
else {
println(a +"," + b)
a + sumInts(a + 1 , b)
}
}
Run Code Online (Sandbox Code Playgroud)
所以 sumInts(2 , 5) returns 14
我对sumInts的递归调用如何求和整数范围感到困惑.可以用文字解释这种方法的工作原理吗?
sumInts如何返回递增的值?也许我错过了这里递归的基本原理
它通过首先计算范围[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)
}
Run Code Online (Sandbox Code Playgroud)
[/更新]
对于范围[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))))| 归档时间: |
|
| 查看次数: |
335 次 |
| 最近记录: |