通过在控制台中将其称为负值,负值如何转为正值?

时间:2016-05-30 08:09:02

标签: 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 isEven(n - 2); 
 }
 }

 console.log(isEven(-3));

3 个答案:

答案 0 :(得分:4)

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

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

这不是JavaScript的特点,而是数学的工作方式。

答案 1 :(得分:3)

控制台与此无关。

回想你的数学课。 -n(-1) * n的缩写表达式。如果你乘以两个负数,结果是一个正数 - 并且由于你乘以负数1(其中正数1是乘法的同一性),结果是相同的数字,但是正数。

由于您在乘以if (n < 0)之前检查-1,因此您将始终获得正数。

然而,这几乎绝对不是你想要的 - 你找到的代码似乎是如何使用递归来解决常见问题的一个例子。在现实世界的Javascript中,你需要更像这样的东西:

function isEven(x) 
{
  return (Math.abs(x) % 2) === 0;
}

答案 2 :(得分:1)

  

它必须是递归

让我们打破模具!使用-1代替2。假设一个整数;

function isEven(x) {
    if (x === 0) return 1; // ended
    return -1 * (isEven(Math.abs(x) - 1) ? 1 : -1) === 1;
}

其他有趣的测试方法,即使不需要2或mod / remaineder

function isEven(x) {
    return Math.round(Math.sin(5 * x / Math.PI)) === 0;
}

O(log n)递归

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