为什么移除if语句后,这个Kotlin递归倒计时函数无法正常运行?
Kotlin递归函数异常原因解答
这是典型的递归缺少终止条件导致的运行错误,具体原因如下:
- 你删除的
if (n == 0) return listOf(0)代码段,就是这个递归函数的唯一终止条件。 - 递归函数的运行逻辑要求必须有明确的终止边界,否则会进入无限递归状态:删除if判断后,无论传入的初始n值是多少,函数都会持续调用
countDown(n - 1),参数值会无限向负数递减,永远不会触发返回逻辑。 - JVM的函数调用栈空间是有限的,每一次
countDown调用都会在栈中压入一个新的栈帧,无限递归很快就会耗尽栈空间,最终抛出StackOverflowError栈溢出异常,程序直接崩溃,自然无法正常返回列表结果。
举个直观的执行流程示例,假设传入参数为2且删除了if语句:countDown(2) → 调用countDown(1) → 调用countDown(0) → 调用countDown(-1) → 调用countDown(-2) → 无限向下调用,没有停止节点。
内容的提问来源于stack exchange,提问作者Ahmed Twba
相关产品推荐
相关产品推荐

