2016-11-14 110 views
3

对于一个任务,我应该写一个递归函数,检查使用N-2的任何整数的偶数或奇数。如果甚至返回true,否则返回false。但是只要一个值足够大就可以调用自己,它就会返回undefined。请帮忙!简单的递归Javascript函数返回未定义

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 
+1

你''中从未isEven'返回一个值else'情况。 –

+0

其他人确实需要返回一个值! – Robba

+0

伟大的功课教你使用递归功能的错误方法。改用模数。 – Xorifelse

回答

2

你已经忘记了return语句之前的递归打电话给isEven(num)

请参见下面的代码片段:

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));

+0

哦,@cyber_rookie似乎打败了我。真的不确定为什么我们都得到-1,但我们的答案肯定是正确的! – Robba

+0

非常感谢。有效! –

+0

非常好!你会如此友善地将答案标记为答案吗? – Robba

0

您可以更改以下行:

isEven(num); 

return isEven(num);