2016-09-14 4 views
0

Я хочу создать функцию, которая получает число, число будет уменьшено до суммы его цифр (16 сведено до 7 -> return 7), пока результат не будет равен только одной цифре (326 сокращается до 11, а затем уменьшается до 2 -> возврат 2).Рекурсивная функция в Javascript возвращает undefined

Я создаю рекурсивную функцию следующим образом, но она возвращает неопределенное значение для цифр, длина которых> 1.

function digital_root(n) { 
    var numStr = (typeof n == "string") ? n : n.toString(); // ensure we will use a string 
    //console.log("evaluating " + numStr + "its length is " + numStr.length); 
    //now evaluate my base case 
    if (numStr.length <= 1){ 
    console.log("i will return" + numStr)//should return my 1 digit number 
    return n; //it doesn't 
    } 
    else{ 
    var arr = numStr.split(""); //convert the string into an array 
    var reducedArr = arr.reduce(function(a,b){ 
     return parseInt(a) + parseInt(b);//sum the elements of the array 
    }); 
    digital_root(reducedArr);//send the reduced value back for evaluation 
    } 
} 
digital_root(16)//returns undefined 

Я видел несколько подобных questions, но они касаются только кода, а не понятие , способ, которым я научился рекурсии, состоит в том, что у вас есть базовый случай, который вы оцениваете, если это правда, тогда верните - это будет конец рекурсии, а если нет, продолжайте и запустите код, который преобразует данные, которые будут снова отправлен для оценки.

Как я могу избежать неопределенного результата и является ли моя концепция рекурсии точным?

+4

'return digital_root (reducedArr)' – Phil

ответ

3
return digital_root(reducedArr); 

У вас не хватает в else подразделению return. A function, который не выполняет return, даст undefined.

Смежные вопросы