2015-09-24 9 views
6

Sto cercando di insegnarmi la ricorsione eseguendo una funzione di intervallo in modo ricorsivo. Non riesco a capire perché il codice qui sotto non funziona?Funzione intervallo ricorsivo non funzionante

versione iterativa:

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

versione ricorsiva:

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

Stai chiamando 'rangeRecursive' con un solo parametro all'interno del metodo. –

+0

Questo non dovrebbe essere stato così difficile da eseguire il debug. Posiziona un punto di interruzione nella riga 'return (num2> num) ...'. Esaminare le variabili locali ti avrebbe mostrato che 'num2' non era definito. Da lì, sarebbe stato un rapido passo per capire che non stavi riuscendo a superare 'num2'. –

risposta

5

Non funziona perché ti manca un parametro nella chiamata ricorsiva

Dovrebbe essere come questo

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

Si noti inoltre la condizione modificata sul ternario, altrimenti si ferma a 1 e non concatena. O è possibile utilizzare il seguente >= o

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

Ti manca il parametro nella funzione ricorsiva. Dovrebbe essere così:

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