2016-09-14 20 views
0

数値を受け取る関数を作成したいのですが、その結果がちょうど1桁の長さになるまで数字はその桁の合計に減らされます(16が7に戻り - > 7を返します) (326は11に減らされ、2 - > 2に戻ります)。Javascriptの再帰関数は未定義を返します

次のように私は、再帰関数を作成していますが、私がquestions類似したいくつかを見てきましたが、彼らはコードだけではなく概念に対処長さ> 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 

ある数字のためにundefinedを返します。私が再帰を学んだ方法は、あなたが評価したベースケースを持っていることです。それが本当であればリターン - これは再帰の終わりです - もしそうでなければ、進むデータを変換するコードを実行します評価のために再度送信されました。

どのように私は未定義の結果を避けることができ、私の再帰の概念は正確ですか?

+4

'return digital_root(reducedArr)' – Phil

答えて

3
return digital_root(reducedArr); 

あなたはelseブランチでreturnが欠落しています。 returnを実行しないfunctionundefinedとなります。

関連する問題