【问题标题】:Simple Recursive Javascript Function Returns Undefined简单的递归 Javascript 函数返回未定义
【发布时间】:2016-11-15 08:07:21
【问题描述】:

对于分配,我应该编写一个递归函数,使用 N-2 检查任何整数的偶数或奇数。如果甚至返回真,否则返回假。但只要值大到可以调用自身,它就会返回 undefined。请帮忙!

function isEven(num) {
  console.log("top of function num = " + num);// For Debugging
  if (num == 0){
      return true;
  }
  else if (num == 1){
      return false;
  }
  else {
    num -= 2;
    console.log("num = " + num);
    isEven(num);
  }
}
console.log(isEven(0));
// → true
console.log(isEven(1));
// → false
console.log(isEven(8));
// → ??

控制台日志结果:

top of function num = 0

true

top of function num = 1

false

top of function num = 8

num = 6

top of function num = 6

num = 4

top of function num = 4

num = 2

top of function num = 2

num = 0

top of function num = 0

undefined

【问题讨论】:

  • else 中的 isEven 永远不会返回值。
  • else确实需要返回值!
  • 太好了,作业教你错误地使用递归函数。改用模数。
  • @Xorifelse 重点是让编写递归函数变得舒服,而不是编写一个数字是否为偶数的有效测试。

标签: javascript recursion


【解决方案1】:

您忘记了递归 isEven(num) 调用之前的 return 语句。

参见下面的 sn-p:

function isEven(num) {
  //console.log("top of function num = " + num);// For Debugging
  if (num == 0){
      return true;
  }
  else if (num == 1){
      return false;
  }
  else {
    num -= 2;
    return isEven(num);
  }
}
console.log('0 is even: ', isEven(0));
// → true
console.log('1 is even: ', isEven(1));
// → false
console.log('8 is even: ', isEven(8));

【讨论】:

  • 哦,@cyber_rookie 似乎打败了我。真的不确定为什么我们都得到-1,但我们的答案肯定是正确的!
  • 太棒了!你能把答案标记为答案吗?
  • 感谢您的提醒,再次感谢您的修复。
  • 在输入答案时使用按钮栏中的 sn-p 按钮 :)(在 Windows 上似乎也可以使用 Ctrl+M)
【解决方案2】:

您可以更改以下行:

isEven(num);

return isEven(num);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    相关资源
    最近更新 更多