2017-02-21 8 views
1

なぜこの関数は未定義に戻っていますか?私はこれを行うためのより洗練された、より良い方法を見てきました。そして、このような配列を変更することは一般に悪い習慣であると私は理解しています。それにもかかわらず、私はこの例が15を返さない理由については不明です。私は狂ったようにコンソールログを記録しました。あなたの禅のような新人忍耐力のために事前にありがとうございます。単純再帰ベースケース

ステップIはそれらを参照として:

  • 配列を渡すとデフォルト
  • 0に配列値がポップされ、これはで通過
  • 再帰呼び出しを合計に加算されない第二の引数を与えません新たに短縮された配列と現在の合計を返します。
  • 配列の長さが0になると、終了条件が満たされ、合計が返されます。

var sumOfArray = function(array, total = 0) { 
 
    var temp = 0; 
 

 
    // base case 
 
    if (array.length == 0) { 
 
    return total; 
 
    } 
 

 
    temp += array.pop(); 
 
    total += temp; 
 

 
    sumOfArray(array, total); 
 
}; 
 

 

 
console.log('sumOfArray([1, 2, 3, 4, 5]=' + sumOfArray([1, 2, 3, 4, 5]));

+0

再帰呼び出しの戻り値を返す必要があります。そうしないと、何も返されません(=未定義)。 – trincot

+0

もちろん、ありがとう! – adamb

答えて

1

男ねえ、主にそのコードのすべてが正しかったです。あなたはelseブロックとその他の小さなものでreturn文を紛失していました。我々はすべてそこにいた。

var sumOfArray = function(array, total=0) { 
    var temp = 0; 
    if (array.length === 0) { 
    return total; 
    } else { 
    temp += array.pop(); 
    total += temp; 
    return sumOfArray(array, total); 
    } 
} 

sumOfArray([1,2,3,4,5]) 
+0

面白そうな見た目は今見えます...ありがとう! – adamb

関連する問題