テール再帰のほかにテールコールの最適化は可能ですか?私は、再帰を伴わないが、成功していないものを見つけようと試みてきた。出来ますか?どんな例?テール再帰のほかにテールコールの最適化?
答えて
確かに「テールコール最適化」は、この種の最適化のための最も一般的な、再帰的に不可知な形式の用語です。この最適化は、再帰を、while
ループまたはそれに類するものと同等のものに置き換えません。代わりに、テールコールは、呼び出し元のスタックフレームが再利用されるように変換されます。 の形式のコードreturn f(...)
またはf(...); return
はこれに修正可能です。コンパイラが何が呼び出されているかをコンパイラが知ることができないファンクションポインタ/クロージャ/仮想メソッドの場合でも、のいずれかの場合はf
で動作します。したがって、別のコンパイル、高次関数、レイトバインドなどでもうまく機能します。
十分なコードを見れば、それは機能的にも必須でもありません。一般的なケースは、呼び出し元が主タスクの呼び出し先に委任し、いくつかの追加の準備だけです。関数コードでは、たった一つだけしかなく、他の小さな関数の観点から実装されている小さな関数がたくさんあるので、単純な変換を引数に適用したいくつかの層で終わります。次の層(変換されたデータを引数として) TCOは2番目のステップを最適化します(理想的には)単純なjump
のような安価な呼び出しを行い、モノリシックな実装よりもスタックスペースを少なくして素敵なモジュラーコードにします。
SomeClass doSomething(Argument a) {
log.debug("Doing something");
return this.somethingDoer.doIt(a, this.someExtraData);
}
技術的に相互に再帰的だが、通常は数十人との任意の機能の非常に少数のアクティベーションを(持っているもう一つの例:あなたが他のオブジェクトのオブジェクトを構成し、そのデリゲート便利なメソッドを公開することがあり、オブジェクト指向設計ではまたはその間の他のアクティベーション数百)、状態ごとの機能を有し、その状態に入るようにそれを呼び出すことによって実装された状態機械である:
void stateA() {
// do actual work
// determine which transition applies
stateB();
}
void stateB() {
// do actual work
// determine which transition applies
state...();
}
// dozens, possibly hundreds of other states
- 1. ES6クラスの再帰メソッドはTCO(テールコール最適化)を利用しますか?
- 2. テールコール再帰的に最適化された式をビルドできますか?
- 3. Mathematicaのテールコールの最適化?
- 4. CとHaskellでの相互再帰でのテールコール最適化のコンパイル
- 5. 再帰的プログラムの最適化
- 6. テール再帰のないクイックソート
- 7. gcc/g ++のテール再帰
- 8. 再帰、テール再帰と反復
- 9. テールコール最適化とRAII共存可能?
- 10. MATLABはテールコールの最適化を実行しますか?
- 11. array_walk_recursiveはテールコールの最適化を使用しますか?
- 12. GCC/Clangでテールコールの最適化を強制できますか?
- 13. Fregeはテールコールの最適化を実行しますか?
- 14. テール再帰vs Erlangでの前方再帰
- 15. は、テンプレート関数の再帰呼び出しを最適化するのに十分なほどスマートです。
- 16. GHCはテールコールでIOアクションを最適化できますか?
- 17. PL/SQLはテール・コールの最適化を実行しますか?
- 18. の最適化非末尾再帰関数
- 19. プロローグ、三角数字、アキュムレータ、テール再帰
- 20. テール再帰で "n-rooks"を解く
- 21. プライムファクターを使用したClojureテール再帰
- 22. iPhone用のXcodeはテールコール再帰を排除しますか?
- 23. mysql再帰結合クエリを最適化する
- 24. 再帰的な迷路ソルバーを最適化する方法
- 25. この実装はテール再帰的ですか
- 26. このコードはテール再帰的ですか?
- 27. nが偶数の場合に最適化されたx^nの再帰メソッド
- 28. テール再帰に必ずアキュムレータが必要ですか?
- 29. try catchブロックにテール再帰コードはありませんか?
- 30. ほぼ再帰があります。最後に一つ
[継続は(http://en.wikipedia.org/wiki/Continuation -passing_style "ウィキペディアの記事「Continuation-passing style」)は、テールコールの最適化の対象となる可能性があります。 – stakx