【发布时间】:2018-10-28 16:29:38
【问题描述】:
我正在尝试编写一个函数来找到 1 到 20 之间的所有整数除以的最小数字。 (我们称之为条件 D)
这是我的解决方案,它以某种方式超出了调用堆栈大小限制。
function findSmallest(num){
var count = 2
while (count<21){
count++
if (num % count !== 0){
// exit the loop
return findSmallest(num++)
}
}
return num
}
console.log(findSmallest(20))
我对此的推理有问题,但这是我的看法(请纠正我的错误):
使用不满足条件 D 的数 N 调用此函数将导致再次使用 N + 1 调用该函数。最终,当它达到应满足条件 D 的数 M 时,while 循环将运行所有方法通过并且函数返回数字 M 并且不再有递归调用。
但我在运行时收到此错误:
函数 findSmallest(num){ ^
RangeError: 超出最大调用堆栈大小
我知道这样的错误几乎总是由于递归函数没有达到基本情况。这是这里的问题吗?如果是,问题出在哪里?
【问题讨论】:
标签: recursion runtime-error division stack-size