这个函数从哪里得到它的值



这是一本书中的一个例子。如果是偶数则返回TRUE,如果不是则返回FALSE。我不明白这是怎么回事。这是我的理解:

  1. 42结合n
  2. 创建"even"函数
  3. x与n结合= 42
  4. x != 0
  5. 启动"else"
  6. 创建"奇数"函数
  7. odd(42 - 1)
  8. 启动"!(41)"。

JS如何处理"even(41)"?TRUE从何而来?我理解它的方式应该返回TRUE只有当x === 0

document.write(
  ((n) => {
    const even = (x) => {
      if (x === 0) return true;
      else {
        const odd = (y) => !even(y);
        return odd(x - 1);
      }
    }
    return even(n)
  })(42)
)

故意让人困惑。遵循逻辑。

如果n不为0,则创建一个名为odd的新函数,该函数调用偶数并反转偶数的布尔值。

然后我们用n-1调用函数。

所以本质上,它就像一个while循环,你不断地从数字中减去1,并在每一步中反转它的真假,直到你得到0。如果函数被调用偶数次,它就是偶数。如果它被称为奇数次,它就是奇数。

下面的代码执行与图书示例相同的逻辑,包括递归的使用,但如果使用非整型或负值调用isEven,则会防止无限循环。

const isEven = (n) =>
{
    const even = (x) =>  x ? !even(x-1) : true;
    return even( Math.abs(Math.floor(n)));
}
isEven( 42)

现在台架逻辑测试相当直接:

even( 0) returns true;
even( 1) returns !even( 1-1), which is !even(0), which is false;
even( 2) returns !even( 2-1), which is !even(1), which is true;
对于更大的数,使用

等等。参数值的每一次递增都执行一次对偶数的额外递归调用,以补充它下面的数字的"偶数",直到达到硬编码为偶数的零。

最终结果是,如果even被调用奇数次(对于偶数),isEven返回true;如果even被调用偶数次(对于奇数),isEven返回false。

相关内容

  • 没有找到相关文章

最新更新