请求解析Scala递归函数r(22, 18)返回4的底层逻辑
拆解Scala递归函数
r(22, 18)返回4的推导过程 没问题,我来帮你理清楚这个递归的逻辑!首先得先明确递归函数r的定义——从返回结果4来看,它大概率是一个用递归实现的**"大数减小数直到结果小于小数"**的逻辑,常见的实现代码大概是这样:
def r(a: Int, b: Int): Int = { // 如果第一个数小于等于第二个数,交换位置保证大数在前 if (a <= b) r(b, a) // 如果大数减小数的结果比小数小,直接返回这个差值 else if (a - b < b) a - b // 否则继续递归,用差值作为新的大数 else r(a - b, b) }
现在我们一步步拆解r(22, 18)的执行流程:
- 第一次调用:
r(22, 18)- 此时
a=22,b=18,满足a > b的条件,计算a - b = 22 - 18 = 4 - 检查
4 < 18,这个条件成立,所以直接返回4 - 递归在这里就终止了,最终结果就是4
- 此时
如果是另一种更简洁的递归实现(比如用递归处理参数顺序,直接返回取余结果),代码会是这样:
def r(a: Int, b: Int): Int = if (a > b) a % b else r(b, a)
推导过程更直接:
- 调用
r(22,18),a > b,直接计算22 % 18 = 4并返回,结果就是4
总结一下:这个递归函数的核心逻辑就是调整参数顺序保证大数在前,然后计算大数与小数的差值(或直接取余),当结果小于小数时返回该值,对于22和18来说,一次计算就得到了符合条件的4,所以最终返回4。
内容的提问来源于stack exchange,提问作者user7724005
相关产品推荐
相关产品推荐

