【发布时间】:2021-07-18 16:59:44
【问题描述】:
function checkRange(num, temp) {
for (var i = 1; i < num; i++) {
console.log(temp % i, i, temp);
if (temp % i != 0) {
return false;
}
}
return true;
}
function smallestCommons(arr) {
arr.sort((a, b) => {return a > b})
var two = [arr[1]];
var check = false;
while (check == false) {
two.push(two[two.length - 1] + arr[1])
if (checkRange(arr[1], two[two.length - 1]) == true) {
check = true;
return two[two.length - 1];
}
}
console.log(two);
// not sure what to do with this
return two[two.length - 1];
}
smallestCommons([1, 13]);
所以我确实意识到这可能是一个无限循环,但我想知道为什么会这样。
我的代码不适用于:
smallestCommons([1, 13]) 应该返回 360360。
smallestCommons([23, 18]) 应该返回 6056820。
代码按以下步骤工作:
获取较小的数字作为第一个索引(排序)
创建一个循环,不断将最后一个索引与 arr[1] 相加,并验证是否每个计数到 arr[0] 的数字都可以为数组的最后一个元素平分。
【问题讨论】:
-
您似乎从未将
check设置为true。因此,退出循环需要(countDown(arr[1], two[two.length - 1]) == true评估为true。 -
顺便说一句,函数
countDown()可以更好地命名。我很确定它的目的不是倒计时。 -
比较你的代码和this。
-
@RobertHarvey 我不确定如何合并它。另请注意,我的数学很差。
-
所以只需浏览我发布的链接中的代码,执行您脑海中代码的每一步。无论如何,您都需要学习如何做到这一点。另见ericlippert.com/2014/03/05/how-to-debug-small-programs
标签: javascript loops infinite-loop infinite