【发布时间】:2023-03-31 19:37:01
【问题描述】:
我正在做一个Codewars challenge,其中我必须创建一个函数,其中参数 a、b 和 c 对应于二次方程 ax^2 + bx + c = 0 并求解 x。目标不仅是求解 x,而且是尽量减少浪费的 Math.sqrt 调用次数。 (您还必须返回一个具有唯一解的数组)。
我想出了一个解决方案:
function solveQuadratic(a, b, c) {
if ((4*a*c > b*b) || ((a === 0) && (b === 0))) { return undefined;}
else if (a === 0) {return [-c/b];}
else {
var xVals = [];
var sqrt = Math.sqrt(b*b - 4*a*c);
xVals.push((-b - sqrt)/2*a);
xVals.push((-b + sqrt)/2*a);
if (xVals[0] === xVals[1]) {xVals.pop();}
return xVals;
}
}
我收到错误消息:
您使用 6 个 Math.sqrt 调用通过了测试。 您应该能够通过 4 次或更少的 Math.sqrt 调用通过这些测试。
我认为将表达式的平方根部分的结果存储在一个变量 (sqrt) 中会阻止它被多次调用以评估表达式并为变量赋值。但事实并非如此。
所以我有几个问题:
- 有没有办法存储(静态)值,以便在代码中使用它时无需重新计算?
- 这个解决方案除了调用了太多 Math.sqrt 之外,还有什么明显的遗漏吗?
【问题讨论】:
-
您的代码正在一个调用
Math.sqrt()... -
一个 static 值没有得到“重新评估”,这没有任何意义。如果它需要评估,那么它首先不是静态值。
-
您似乎正在拨打一个
Math.sqrt电话。您对变量sqrt的后续引用不会调用该函数。此代码是否存在于可能解释其他 5 个调用的更大上下文中? -
您是否在测试用例中调用此函数六次?
-
测试是否多次调用该函数?听起来好像是在要求你解 6 个方程,其中一些方程的系数相同。
标签: javascript math