2016-11-14 3 views
3

Для назначения я должен написать рекурсивную функцию, которая проверяет любое целое число для четного или нечетного с использованием N-2. Если даже возвращает true, else возвращает false. Но он возвращает undefined всякий раз, когда значение достаточно велико, чтобы называть себя. Пожалуйста помоги!Простая рекурсивная функция Javascript Возвращает Undefined

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)); 
// → ?? 

Console Log Результаты:

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

Ваш 'else' случай' isEven' никогда не возвращает значение. –

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