19

税金を計算する関数があります。

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;
    }
} 

再帰を止めない理由がわかりません。

4

3 に答える 3

41

あなたの関数のこの腕で:

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); 
}

関数または設定から​​値を返していませんreturnTax。何も返さない場合、戻り値はundefinedです。

おそらく、あなたはこれが欲しい:

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); 
}
于 2012-10-05T00:49:05.610 に答える
14

再帰にバグがあります:

taxes(tax, newSalary);

ifの条件がtrue と評価された場合、何も返しません。それを次のように変更する必要があります。

return taxes(tax, newSalary);

に必要なreturnステートメントがありelseます。

于 2012-10-05T00:48:23.627 に答える