Javascript 在控制台中,负值如何通过称为负值而变为正值?

Javascript 在控制台中,负值如何通过称为负值而变为正值?,javascript,Javascript,我使用了Math.abs,但我失败了,找到了这个解决方案,我遵循了雄辩的javascript,以及负值是如何变为正值的,下面是代码: function isEven(n) { if (n == 0) { return true; } else if (n == 1) { return false; } else if (n < 0) { console.log(-n); return isEven(-n); // turn -3 to 3? } else { return i

我使用了Math.abs,但我失败了,找到了这个解决方案,我遵循了雄辩的javascript,以及负值是如何变为正值的,下面是代码:

function isEven(n) {
 if (n == 0) {
  return true;
 }
else if (n == 1) {
 return false;
}
else if (n < 0) {
console.log(-n);
return isEven(-n); // turn -3 to 3?
}
 else {
 return isEven(n - 2); 
 }
 }

 console.log(isEven(-3));

下面是一个更简单的测试用例:

> console.log( -(-3) );
3

这不是JavaScript的特性,而是数学的工作原理。

控制台与此无关

回想一下你的数学课-n是-1*n的缩写表达式。如果你把两个负数相乘,结果就是一个正数——因为你是用负数1相乘,其中正数1是乘法的恒等式,所以结果是相同的数字,但却是正数

因为在乘以-1之前要检查n是否小于0,所以得到的总是一个正数

然而,这几乎肯定不是您想要的-您找到的代码似乎是如何使用递归解决常见问题的示例。在现实世界的Javascript中,您可能需要以下内容:

function isEven(x) 
{
  return (Math.abs(x) % 2) === 0;
}
它必须是递归

function isEven(x, a) {
    if (!a) a = [true, false];
    if (a.length > x) return a[x];
    return isEven(x, a.concat(a));
}
让我们打破模式!使用-1而不是2。假设一个整数

function isEven(x) {
    if (x === 0) return 1; // ended
    return -1 * (isEven(Math.abs(x) - 1) ? 1 : -1) === 1;
}
其他有趣的测试方法,甚至不需要2或mod/remainer

function isEven(x) {
    return Math.round(Math.sin(5 * x / Math.PI)) === 0;
}
一个OLOGN递归

function isEven(x, a) {
    if (!a) a = [true, false];
    if (a.length > x) return a[x];
    return isEven(x, a.concat(a));
}

我用过数学,但我不及格?哪里为什么?谢谢@alvarogonzález我明白了,就是这样——3谢谢,我安慰你,这很好positive@Rayon我无法通过递归处理负值,并且找到了这个解决方案:函数isEvenn{returnn%2==0;}你应该看看模运算符,而不是在你的isEven函数中递归;我想卢安只是想让你明白否定理论是如何运作的。执行代码的处理器可能只是翻转负位。有关带符号整数表示的信息,您可以读入@GlendonPhilippBaculio,这两个表达式在数学上是等价的-它们不一定在CPU上有相同的实现,尽管编译器可能将两者编译为相同的指令。