我试图编写一个函数来检查一个数字" N"通过减去2直到达到1或0是偶数或奇数。最终值0表示偶数。这里的目标是使用递归函数来达到最终结果,但我遇到了一些问题,我所返回的内容都是未定义的。
这是我到目前为止所做的。
function isEven(number) {
function subTwo(number) {
if (number == 0) {
return true;
}
else if (number == 1) {
return false;
}
else if (number > 0) {
number -= 2;
subTwo();
}
else {
console.log("bruh");
}
};
};
console.log(isEven(50));
// → true
console.log(isEven(75));
// → false
console.log(isEven(-1));
// → ??
有人看到我做错了什么或对我有什么建议吗?
感谢。
修改
感谢帮助人员。有人建议我完全删除subTwo并使用isEven作为递归函数,并且我必须在第二个if / else语句中使用return isEven(number)
。
这两个建议共同帮助代码正确编译。
非常感谢大家,虽然我不确定为什么我会被贬低大声笑。
答案 0 :(得分:1)
你的问题在这里:
subTwo();
您需要将当前版本的号码传递给它:subTwo(number);
并将其返回。
您也可以通过省略内部函数中的参数来解决问题,如下所示:function subTwo(){...}
内部函数已经可以访问父函数的参数(closure),所以你不需要把它传递到内部。
此外,这不会返回任何内容,它只是记录。 JavaScript总会返回一些东西。如果你不回复"某事",它会返回undefined
。
else {
console.log("bruh");
}
就个人而言,我也会像你这样修改你的代码:
function subTwo(number) {
if (number > 0) {
number -= 2;
subTwo();
}
else if (number == 1) {
return false;
}
else if (number == 0) {
return true;
}
else {
console.log("bruh");
}
};
语句按降序排列,因此您可以快速查看进度。它可以帮助人们查看是否遗漏了任何内容。
答案 1 :(得分:0)
问题是你定义了函数subTwo
但是在调用isEven
时它实际上从未被调用过。更简单的版本是甚至没有其他功能,并且使用isEven
function isEven(number) {
if (number === 0) {
return true;
} else if (number === 1) {
return false;
} else {
return isEven(number - 2)
}
}
修改强>
或者,如果您确实需要附加功能,请注意您已定义subTwo
以接受参数,但在通过subTwo();
递归调用时未传入参数。此外,当您递归调用subTwo(number)
时,请确保您实际拥有return subTwo(number)
,以便在每次递归调用时返回该值。此外,您需要实际调用函数并在通过isEven(number)
语句调用return
并将函数包装在括号中并使用number
调用它或使用{手动调用它时>返回结果{1}}。请参阅下面的示例,了解如何在每个阶段返回,以便将其全部传递回原始调用return subTwo(number)
:
isEven(number)
答案 2 :(得分:0)
正如在评论中所说,你永远不会检查小于0的值。当你输入值-1时会发生什么情况,它会跳转到代码的else部分。部分说“console.log(”bruh“);”完成该行后,程序继续运行并返回......没有。你没有返回任何东西,因此你为什么不定义。您应该设置代码来处理传递负数的情况。