递归求和函数如何设置求和上限?Scala实现代码运行错误排查
问题原因排查
你的代码存在两个核心错误:
- 终止条件设置错误:
u/2 == 1仅能覆盖u=2、u=3的输入场景,输入小于2时会触发递归栈溢出,逻辑也不符合求和终止的要求 - 单步项计算逻辑错误:你定义
i = u/2 + 1,代入u + 1 - 2*i计算得到的结果恒为-1,和你需要的求和项逻辑完全不符
修正方案
递归求和的核心设计逻辑是:under(u)对应上限为u的求和结果,等于当前u对应的求和项值加上上限为u-1的求和结果under(u-1),输入为0时返回0作为终止条件。
符合你预期under(5) = 10的修正代码如下:
def under(u: Int): Int = { // 终止条件:u为0时求和结束 if u == 0 then 0 // 每一项值为u-1,累加前序求和结果 else (u - 1) + under(u - 1) }
如果你需要适配最初的求和公式,只需要修改else分支里的单步项计算逻辑即可,核心递归框架不需要调整。
内容的提问来源于stack exchange,提问作者DoubleT
相关产品推荐
相关产品推荐

