2015-09-24 12 views
6

私は、再帰的に範囲関数を実行して再帰を教えようとしています。私はなぜ以下のコードが動作していないのか理解できません。再帰的範囲関数が動作しない

反復バージョン:

function rangeList(num, num2) { 
    var arr = []; 
    for (var i = num; i < num2; i++) { 
    arr.push(i); 
    } 
    return arr; 
} 

再帰バージョン:

function rangeRecursive(num, num2) { 
    return (num2 > num) ? rangeRecursive(num2 - 1).concat(num2) : [] 
} 

console.log(rangeList(1, 7)); // returns [1, 2, 3, 4, 5, 6] 
console.log(rangeRecursive(1, 7)); // returns [7] 
+3

メソッド内に1つのパラメータだけを指定して、「rangeRecursive」を呼び出しています。 –

+0

これはデバッグするのが難しいはずはありません。 'return(num2> num)...'行にブレークポイントを置きます。ローカル変数を調べると、 'num2'が未定義であることがわかりました。そこから、あなたが 'num2'を渡すことに失敗したことを知るための素早いステップだったでしょう。 –

答えて

5

それはあなたがあなたの再帰呼び出し

にパラメータが不足しているので、このようにする必要があります動作しません。

function rangeRecursive(num, num2) { 
    return (num2 >= num) ? rangeRecursive(num /*this was missing*/, num2 - 1).concat(num2) : [] 
} 

変更された条件は3進でも確認できます。それ以外の場合は1で停止し、連結しません。あなたは、あなたの再帰関数のパラメータが欠落している>=または以下

return num2 > num ? rangeRecursive(num, num2 - 1).concat(num2) : [num] 
1

を使用することができます。

function rangeRecursive(num, num2) 
{ 
    return num2 > num ? rangeRecursive(num, num2 - 1).concat(num2) : [num] 
}