为何递归调用函数前必须加return才能获取正确输出?
递归判断奇偶函数返回undefined的原因
你写的递归函数之所以返回undefined,核心问题出在递归调用时没有返回结果:
当n既不是0也不是1时,你只是执行了isEven(n - 2)这个递归调用,但没有把这个调用得到的true或false返回给上一层函数。JavaScript规定,如果函数执行流程结束时没有遇到return语句,就会默认返回undefined。
举个例子,调用isEven(50)时,函数会一层层调用isEven(48)、isEven(46)……直到isEven(0)返回true。但这个true只会返回到调用它的上一层isEven(2),而isEven(2)里只是执行了isEven(0),没写return,所以isEven(2)会返回undefined,接着这个undefined又返回到isEven(4),最终传到最外层的isEven(50),结果自然就是undefined。
修正后的代码应该在递归调用前加上return,确保每一层都把内层的结果传递出去:
function isEven(n) { if (n == 0) return true; else if (n == 1) return false; else return isEven(n - 2); }
这样,当isEven(0)返回true时,isEven(2)会把这个true返回给isEven(4),一层层传递下去,最终isEven(50)就能得到正确的true结果。
内容的提问来源于stack exchange,提问作者BJ Dunc
相关产品推荐
相关产品推荐

