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));
答案 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“并不是你正在寻找的机器人。
实际的代码更改留给读者练习。