La funzione ricorsiva restituisce undefined

Ho una funzione che calcola le tasse.

function taxes(tax, taxWage) { var minWage = firstTier; //defined as a global variable if (taxWage > minWage) { \\calculates tax recursively calling two other functions difference() and taxStep() tax = tax + difference(taxWage) * taxStep(taxWage); var newSalary = taxWage - difference(taxWage); taxes(tax, newSalary); } else { returnTax = tax + taxWage * taxStep(taxWage); return returnTax; } } 

Non riesco a capire perché non fermi la ricorsione.

In questo arm della tua funzione:

 if (taxWage > minWage) { // calculates tax recursively calling two other functions difference() and taxStep() tax = tax + difference(taxWage) * taxStep(taxWage); var newSalary = taxWage - difference(taxWage); taxes(tax, newSalary); } 

non si restituisce un valore dalla funzione o l’impostazione returnTax . Quando non si restituisce nulla, il valore restituito undefined è undefined .

Forse, vuoi questo:

 if (taxWage > minWage) { // calculates tax recursively calling two other functions difference() and taxStep() tax = tax + difference(taxWage) * taxStep(taxWage); var newSalary = taxWage - difference(taxWage); return taxes(tax, newSalary); } 

C’è un bug con la tua ricorsione:

 taxes(tax, newSalary); 

Non si restituisce nulla quando la condizione in if valutata su true. Devi cambiarlo in:

 return taxes(tax, newSalary); 

Hai la dichiarazione di return necessaria nel else .