Я хочу создать функцию, которая получает число, число будет уменьшено до суммы его цифр (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, но они касаются только кода, а не понятие , способ, которым я научился рекурсии, состоит в том, что у вас есть базовый случай, который вы оцениваете, если это правда, тогда верните - это будет конец рекурсии, а если нет, продолжайте и запустите код, который преобразует данные, которые будут снова отправлен для оценки.
Как я могу избежать неопределенного результата и является ли моя концепция рекурсии точным?
'return digital_root (reducedArr)' – Phil