ホームページ >ウェブフロントエンド >jsチュートリアル >この再帰的な税金計算関数で未定義の再帰が発生するのはなぜですか?
税計算における未定義の再帰
この再帰的な税計算関数では:
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; } }
再帰が終了しません。具体的には、問題は再帰呼び出しを呼び出す関数のアームにあります。
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 変数を設定しません。関数が明示的に返さない場合、デフォルトで unknown を返します。その結果、再帰が無期限に継続し、未定義の結果が生じます。
この問題を解決するには、コードのこの部分を次のように変更する必要があります:
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); }
この変更により、関数は確実に戻ります。再帰呼び出しの結果。値が再帰チェーンの上に適切に伝播されます。
以上がこの再帰的な税金計算関数で未定義の再帰が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。