2015-09-24 5 views
6

मैं एक रेंज फ़ंक्शन को बार-बार कर कर खुद को रिकर्सन करने की कोशिश कर रहा हूं। मुझे समझ में नहीं आ रहा है कि नीचे दिया गया कोड क्यों काम नहीं कर रहा है?रिकर्सिव रेंज फ़ंक्शन काम नहीं कर रहा है

Iterative संस्करण:

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

आप विधि के अंदर केवल एक पैरामीटर के साथ 'रेंज रिकर्सिव' को कॉल कर रहे हैं। –

+0

यह डीबग करना मुश्किल नहीं होना चाहिए था। 'वापसी (num2> num) ... 'रेखा पर ब्रेकपॉइंट रखें। स्थानीय चर की जांच से आपको पता चला होगा कि 'num2' अपरिभाषित था। वहां से, यह पता लगाने के लिए एक त्वरित कदम होता कि आप 'num2' पास करने में विफल रहे थे। –

उत्तर

5

यह काम नहीं करता है, क्योंकि आप अपने पुनरावर्ती कॉल में कोई पैरामीटर मौजूद नहीं

यह इस तरह होना चाहिए

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

टर्नरी पर बदली गई स्थिति को भी ध्यान दें, अन्यथा यह 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] 
} 
संबंधित मुद्दे