【问题标题】:Recursion return undefined instead true [duplicate]递归返回未定义而不是true [重复]
【发布时间】:2016-07-25 11:07:11
【问题描述】:

我想知道为什么这个函数返回未定义? 谁能给我解释一下?

function isEven(i) {
  if (i === 0 ) {
    return true;
  } else if (i == 1) {
    return false;
  } else {
    console.log(i);
    isEven(i - 2);
  }
}
console.log(isEven(6));

【问题讨论】:

  • return isEven(i - 2),缺少return
  • 6 % 2 === 0 检查一个数字是不是就足够了?

标签: javascript function loops if-statement recursion


【解决方案1】:

您没有返回 else 语句。在 JavaScript 中,所有的函数都必须返回一些东西,所以如果你忘记在里面放一个 return 语句,它就会返回 undefined。

} else {
    console.log(i);
    isEven(i - 2)
}

应该是

 } else {
    console.log(i);
    return isEven(i - 2);
}

【讨论】:

    【解决方案2】:

    //You should return value to expect output
    
    function isEven(i) {
      if (i === 0 ) {
        return true;
      } else if (i == 1) {
        return false;
      } else {
        console.log(i);
        return isEven(i - 2);
      }
    }
    
    console.log(isEven(5))

    【讨论】:

      【解决方案3】:

      您可以通过以下方式简化很多:

      function isEven(i){ return i%2===0; }
      

      【讨论】:

      • 我知道这个方法,但我正在学习递归语法:)
      【解决方案4】:

      或者用更简洁的样式加上最后的return,因为else不是必须的,因为return结束了功能的连续性。

      function isEven(i) {
          if (i === 0 ) {
              return true;
          }
          if (i == 1) {
              return false;
          }
          document.write(i + '<br>');
          return isEven(i - 2);
      }
      document.write(isEven(6));

      最短的为

      function isEven(i) {
          return !(i & 1);
      }
      document.write(isEven(5));

      【讨论】:

      • 这段代码是如何工作的? function isEven(i) { return !(i &amp; 1); } document.write(isEven(5));
      • @meks,它使用 位运算符和 (&amp;)。这行得通,因为偶数有一位代表 1,最右边的位。使用&amp;,你会得到奇数1和偶数0。这与想要的相反,所以这里也应用了not运算符!。请看here
      猜你喜欢
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2021-11-09
      • 2019-05-17
      • 1970-01-01
      • 2012-09-26
      • 2022-01-11
      相关资源
      最近更新 更多