在控制台中将负值称为负值,负值如何转为正值?
问题描述:
我用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是乘法的同一性),结果是相同的数字,但是是正数。
由于您在检查if (n < 0)
之前,你乘以-1
,你总是会得到一个正数。
然而,这是几乎可以肯定不是你想要的 - 你找到的代码似乎是如何使用递归来解决共同问题的例子。在现实世界中的Javascript,你想要更多的东西是这样的:
function isEven(x)
{
return (Math.abs(x) % 2) === 0;
}
答
它必须是递归
让我们打破了模具!使用-1
而不是2
。假设一个整数;
function isEven(x) {
if (x === 0) return 1; // ended
return -1 * (isEven(Math.abs(x) - 1) ? 1 : -1) === 1;
}
其他有趣的方式来测试,甚至不需要2
或模/ 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));
}
_“我用Math.abs但我失败了“_?哪里?为什么? – Rayon
感谢@ÁlvaroGonzález我得到它,所以它是 - ( - 3)感谢我安慰,它的积极 –
@Rayon我没有照顾负值的递归,发现了这个解决方案, –