2016-10-18 13 views
1

私はswitch文を何度も使用します。私は自分の関数の中でreturn文を使いたいと思っています。私はこのように記述されたswitch文がまだtail-call最適化されているかどうか疑問に思っていました。switch文の末尾が再帰的か?

最適化された case x > 1末尾呼び出しを行うために変更する必要がありますどのような
function misc(x) { 
    switch(true){ 
     case x > 1: 
      return misc(x-1); 
      break; 
     default: 
      return; 
    } 
} 

switchステートメントで行うことは可能ですか、ifステートメントのような別のステートメントを使用する必要がありますか?

注:ほとんどの主要なブラウザでは、テールコールの最適化はJavaScriptではサポートされていません。私は、上記のコードが現在のブラウザがサポートしているかどうかにかかわらず、テールコールの最適化と互換性があるかどうかはほとんど疑問です。

答えて

3

ES6でのテールコール最適化の要件は、関数呼び出しがテールポジションにある天気にのみ依存します。つまり、関数が天気予報に戻る前に最後に実行されたものです。あなたのケースでは

return misc(x-1); 

が末尾位置にmisc()ます。したがって、テールコール最適化が可能です。

あなたはこのような何かをした場合にそれが起こることができない場合は、次のとおりです。

return 1 + misc(x-1); 

それは同じになりますので、だこと:

misc()がないことを意味
var tmp = misc(x-1); 
tmp = 1 + tmp; 
return tmp; 

尾の位置にある。

returnは限り関数は末尾呼び出しを最適化することができ、尾の位置にあるように、ifまたはwhileswitchにあるのであれば、それは問題ではありません。

+0

今私は愚かな咬合を感じる。私はそれを知っていたはずです。ありがとうございました。 – Ucenna

関連する問題