2016-11-14 107 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);