gpt4 book ai didi

javascript - 为什么我的函数返回一个只有一个元素的数组?

转载 作者:行者123 更新时间:2023-12-02 16:21:30 26 4
gpt4 key购买 nike

我正在编写一个函数,它将返回一个包含素数的数组。

该函数应返回一个包含 n 个元素的数组。 (n是一个参数)但是它只返回一个元素。为什么?

我的代码:

function findPrimes(n)
{
var arr = [];
var currIndex = 0;
var sqrtNum;
var ceiledNum;
var ceiledIndex = 0;
var currCompose;
var res;
for (initNum = 2; arr.length < n; ++initNum)
{
sqrtNum = Math.sqrt(initNum);
ceiledNum = Math.ceil(sqrtNum);
for (currCompose = 2; currCompose <= ceiledNum; ++currCompose)
{
res = initNum % currCompose;
if (res == 0 && initNum != currCompose)
{
break;
}
else if (res == 0 && initNum == currCompose)
{
arr[currIndex] = initNum;
++currIndex;
break;
}
else if (res != 0 && initNum != currCompose)
{
continue;
}
else
{
console.log("Impossible result!");
}
}
}
return arr;
}

findPrimes(2); //return 2
findPrimes(10); //return 2 too

Jsbin

最佳答案

您不应该将 initNumcurrCompose 进行比较。请记住,initNum 是您要检查的数字(例如 71),而 currCompose 最多为 ceil(sqrt(initNum)) (比如 9),所以两者永远不会相等。

另请注意,最好仅在内部循环完成后才追加到列表中并验证是否找不到除数。

此修改版本有效。

function findPrimes(n)
{
var arr = [];
var currIndex = 0;
var sqrtNum;
var ceiledNum;
var ceiledIndex = 0;
var currCompose;
var res;
var initNum;



for (initNum = 2; arr.length < n; ++initNum)
{
sqrtNum = Math.sqrt(initNum);
ceiledNum = Math.ceil(sqrtNum);
for (currCompose = 2; currCompose <= ceiledNum; ++currCompose)
{
res = initNum % currCompose;
if (res == 0 && initNum != currCompose)
{
break;
}
}
if (currCompose == ceiledNum+1)
{
arr[currIndex] = initNum;
++currIndex;
}
}
return arr;
}

var primes = findPrimes(6);
document.write(primes);

关于javascript - 为什么我的函数返回一个只有一个元素的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29071589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com