[英]How do i explain the last line to a third party
关于这段代码,我发现很难向第三方解释。 当递归调用我们的函数时,从 n 中减去 2 背后的逻辑是什么?
function is_even(n) {
if (n<0) {
return Math.abs(n)
}
if (n=== 0) {
return true;
} else if (n === 1) {
return false;
} else {
return is_even(num - 2);
}
}
console.log(is_even(8));
所以这里的逻辑是,你基本上可以通过从中减去 2 直到它是 0 或 1 来判断某个东西是奇数还是偶数。
你减去 2,因为如果你再减去任何东西,你可能会超调并最终得到一个负数。 通过减去 2,无论您从什么数字开始,您总是会得到 1 或 0。
如果你从 9 点开始
is_even(9)
9 - 2 = 7 | is_even(7)
7 - 2 = 5 | is_even(5)
5 - 2 = 3 | is_even(3)
3 - 2 = 1 => 1 indicates it is odd and the function will return
也许写出一些像上面这样的例子是向第三方解释的好方法。
我认为您的 is_even 函数需要进行一些调整才能按预期工作:
function is_even(n) {
if (n < 0) {
n = Math.abs(n)
} if (n === 0) {
return true;
} else if (n === 1) {
return false;
}
else {
return is_even(n - 2);
}
}
该函数只检查两件事,如果是 0 则返回 True,如果是 1 则返回 False。
如果您是大于 0 或 1 的任何值,例如 2,3,4,5,6,7,8,...
else 语句的递归性质意味着:您始终可以将任何正数减去 2 次足够的次数,使其变为 0 或 1。
这与将任何数字除以 2 的逻辑相同,余数总是 0 或 1,如果是 0,则该数字是偶数,如果是 1,则该数字是奇数。
你一直减 2 直到 n 是 1 或 0。如果它是 0,它是偶数,如果它是 1,它是奇数。 通过减去 2,您几乎可以找到 n / 2 的余数。
function is_even(n) {
if(n<0){
return Math.abs(n)
}
if (n=== 0) {
return true;
}
else if (n === 1) {
return false;
}
else {
return is_even(n - 2);
}
}
console.log(is_even(8));
首先,该行应该是:
return is_even(n - 2);
代替
return is_even(num - 2);
来解释一下:
给定一个数 n,该函数不断从该数中减去 2,直到余数为负数、0 或 1。如果该数为奇数,则在随后减去 2 时将返回 1。如果是偶数,则余数将为 0。如果数字小于 2,则余数将为负。 再次调用该函数的要点是继续以递归方式减去 2,直到最终值为 0,1 或负数。
当传递负值时,它返回绝对值而不是确定奇数或偶数。
is_num 是一个递归函数,一个在执行过程中调用自身的函数。 现在当你写“return is_even(num - 2);” 那么您发送的参数比原始值 num 小 2 个单位。 return is_even(num - 2);... is_even 将再次被调用,但参数 n 的值将小 2 个单位。
n 的值将继续减少并且递归将继续进行,直到返回某些内容,并且该返回值将在首先调用它的行中接收。
有关更多信息,您可以参考此链接
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.