猿问

递归函数,通过从n减去2直到n = 0或1来确定数字是偶数还是奇数

零是偶数。


一个很奇怪。


对于任何其他数字N,其均匀度与N-2相同。


定义一个与该描述相对应的递归函数isEven。该函数应接受单个参数(正整数)并返回布尔值。


这是我对isEven的实现:


let isEven = function(n){

    even = 0;

    odd = 1;

    if(n == even){

      return true;

    }

    else if (n == odd) {

      return false;

    }

    else{

      n -= 2;

      console.log(n); //Used to see value of n through each call

      isEven(n);

    }

  };

当我调用此函数时,它返回 undefined


  document.write(isEven(50)); //prints `undefined`

来自的输出console.log(n)如下:


Failed to load resource: net::ERR_FILE_NOT_FOUND

48

46

...

0

我不知道为什么Failed to load resource: net::ERR_FILE_NOT_FOUND是第一输出,但在此之后n被击中0,那么为什么


if(n == even){

          return true;

        }?  

没有执行?


慕森王
浏览 226回答 2
2回答

温温酱

但是不要错过学习相互递归的机会!const isEven = (n = 0) =>  n === 0    ? true    : isOdd (n - 1)const isOdd = (n = 0) =>  n === 0    ? false    : isEven (n - 1)    console .log  ( isEven (0)  // true  , isEven (1)  // false  , isEven (2)  // true  , isEven (3)  // false  , isEven (99) // false  )  console .log  ( isOdd (0)  // false  , isOdd (1)  // true  , isOdd (2)  // false  , isOdd (3)  // true  , isOdd (99) // true  )

慕尼黑8549860

您需要从递归调用中返回结果。let isEven = function(n){    const          // declare local variables/constants        even = 0,        odd = 1;    if(n == even){      return true;    }    else if (n == odd) {      return false;    }    else{      //n -= 2; no need to reassign a value for a single use      return isEven(n - 2); // return here    }  };console.log(isEven(50));console.log(isEven(21));没有else零件的更好的样式,因为如果以前返回,则不需要这样做。直接使用值,如果仅使用一次,使用严格的比较(Identity / strict相等运算符===),因为不严格会导致错误的假设直接对参数进行计算,而无需将值重新分配给不再使用的变量let isEven = function(n){        if (n === 0) return true;        if (n === 1) return false;        return isEven(n - 2);    };console.log(isEven(50));console.log(isEven(21));
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答