Scala 用隐式返回语句理解递归函数
下面的递归方法对一个范围内的整数值求和Scala 用隐式返回语句理解递归函数,scala,Scala,下面的递归方法对一个范围内的整数值求和 def sumInts(a: Int, b: Int): Int = { if(a > b) 0 else { println(a +"," + b) a + sumInts(a + 1 , b) } } 因此sumInts(2,5)返回14 我对sumInts的递归调用如何对整数范围求和感到困惑。你能用文字解释这个方法是如何工作的吗 sumInts如何返回递增的值??也许我在这里遗漏了递
def sumInts(a: Int, b: Int): Int = {
if(a > b) 0
else {
println(a +"," + b)
a + sumInts(a + 1 , b)
}
}
因此sumInts(2,5)返回14
我对sumInts的递归调用如何对整数范围求和感到困惑。你能用文字解释这个方法是如何工作的吗
sumInts如何返回递增的值??也许我在这里遗漏了递归的一些基本内容它首先计算范围[a+1,b]的和(递归调用sumits(a+1,b)
),然后向其中添加a
,从而计算范围[a,b]中的值之和
[Update]在Scala中,return
语句是可选的;函数返回最后计算的表达式的值。因此,上述功能体相当于
if(a > b) return 0
else {
println(a +"," + b)
return a + sumInts(a + 1 , b)
}
[/Update]
对于[2,5]范围,它将执行以下操作(为了简单起见,我删除了println
调用,并添加了括号来标记递归调用):
if(2>5)0 else 2+sumInts(2+1,5)
条件为false
,计算结果为
2+消费(3,5)
2+(如果(3>5)0 else 3+sumInts(3+1,5))
计算结果为
2+(3+消费(4,5))
2+(3+(如果(4>5)0其他4+消耗(4+1,5))
计算结果为
2+(3+(4+消费(5,5))
2+(3+(4+(如果(5>5)0其他5+消费(5+1,5))
计算结果为
2+(3+(4+(5+消费(6,5)))
2+(3+(4+(5+)(如果(6>5)0其他6+消耗(6+1,5щщ)
,条件为true
,计算结果为
2+(3+(4+(5+(0))
它首先计算范围[a+1,b]的和(通过递归调用sumInts(a+1,b)
),然后将a
添加到它,从而计算范围[a,b]中的值之和
[Update]在Scala中,return
语句是可选的;函数返回最后计算的表达式的值。因此,上述功能体相当于
if(a > b) return 0
else {
println(a +"," + b)
return a + sumInts(a + 1 , b)
}
[/Update]
对于[2,5]范围,它将执行以下操作(为了简单起见,我删除了println
调用,并添加了括号来标记递归调用):
if(2>5)0 else 2+sumInts(2+1,5)
条件为false
,计算结果为
2+消费(3,5)
2+(如果(3>5)0 else 3+sumInts(3+1,5))
计算结果为
2+(3+消费(4,5))
2+(3+(如果(4>5)0其他4+消耗(4+1,5))
计算结果为
2+(3+(4+消费(5,5))
2+(3+(4+(如果(5>5)0其他5+消费(5+1,5))
计算结果为
2+(3+(4+(5+消费(6,5)))
2+(3+(4+(5+)(如果(6>5)0其他6+消耗(6+1,5щщ)
,条件为true
,计算结果为
2+(3+(4+(5+(0))
谢谢,我还遗漏了一点,即“a”变量在随后的每次调用中都是递增的。注意这个断言,a
实际上从未“更新”,更正确的说法是,对于每次递归调用,该方法都会使用不同的参数值调用,但是a
在每次递归过程中都保持不变。谢谢,我还遗漏了一点,那就是“a”变量在每次后续调用中都是递增的。注意这个断言,a
实际上从来没有“更新过”,更正确的说法是,对于每次递归调用,使用不同的参数值调用该方法,但a
在每次递归期间保持不变。