为什么字符串“PRINTS”在控制台中显示两次,期望它显示一次。递归测试

时间:2016-07-29 01:53:17

标签: javascript function recursion

JavaScript函数递归的测试。意外的结果是字符串“PRINTS”的测试打印在Firefox控制台中显示两次。我不知道“返回”PRINTS“”是如何被击中两次的。

在stackoverflow的代码插入功能中,我运行了代码并显示PRINTS五次,但Firefox控制台显示两次。我在想,因为该行是在递归调用之后,它应该只打印一次PRINTS。有五个递归调用,为什么这会回到原始调用五次,最后一行代码 console.log(isEven(11));

function isEven ( number ) {
if ( number == 0) {
  return "even";

}
else if (number == 1) {
  return "odd";

}
number = number - 2;
console.log (number);
//the if statements return goes to the recursive call, not outside funct call
console.log(isEven(number));
return "PRINTS";
}

console.log (isEven(11));

1 个答案:

答案 0 :(得分:3)

您需要将递归调用的结果返回给链。

就像现在一样,这是你的代码所做的:

call isEven(11) ->
  11 == 0 false
  11 == 1 false
  11 - 2 = 9
  log(9)
  call isEven(9) ->
    9 == 0 false
    9 == 1 false
    9 - 2 = 7
    log(7)
    call isEven(7) ->
      7 == 0 false
      7 == 1 false
      7 - 2 = 5
      log(5)
      call isEven(5) ->
        5 == 0 false
        5 == 1 false
        5 - 2 = 3
        log(3)
        call isEven(3) ->
          3 == 0 false
          3 == 1 false
          3 - 2 = 1
          log(1)
          call isEven(1) ->
            1 == 0 false
            1 == 1 true
            return "odd"
          log("odd")
          return "PRINTS"
        log("PRINTS")
        return "PRINTS"
      log("PRINTS")
      return "PRINTS"
    log("PRINTS")
    return "PRINTS"
  log("PRINTS")
  return "PRINTS"
log("PRINTS")

所有那些“返回”PRINTS“并不是你正在寻找的机器人。

实际的代码更改留给读者练习。