erlangでのパフォーマンスの前方再帰よりもテール再帰が優れていますか?
また、erlangコンパイラも順方向再帰を最適化しますか?
前方再帰の代わりに末尾再帰を使用する理由はありますか?
私の意見では、順方向の再帰はもっと見栄えがよく見えます。テール再帰vs Erlangでの前方再帰
5
A
答えて
3
テール再帰は通常、メモリの使用量が少ないため、より優れています。必要なものだけを次の呼び出しに持ってくるので、スタック上のメモリ使用率が最小限に抑えられます。また、テール再帰コードが最適化されている場合、不要な関数の戻り値は破棄されるため、場合によっては若干早くなります。
たとえば、関数の戻り値が別の関数の呼び出しである場合、スタックに仲介関数を保持する必要はありません。コードは内部関数から呼び出し側に直接ジャンプします。
非テール再帰は、場合によってはErlangコンパイラによってテール再帰に最適化されますが、それにはカウントされません。可能であれば、いつでも尾の再帰関数をコーディングすることをお勧めします。
10
テール再帰と前方再帰は全く異なる概念です。 これを見るdiscussion
テール再帰的で最適化された順方向再帰を書くことができます。テール再帰的でない順方向再帰を書くことも可能である。この場合、最適化されない。すなわち、スタック空間を消費する。
関連する問題
- 1. 再帰、テール再帰と反復
- 2. NodeJSのテール再帰
- 3. テール再帰(@tailrec)再帰関数対非再帰関数スカラースタックオーバーフローエラー?
- 4. Scalaでのテール再帰
- 5. gcc/g ++のテール再帰
- 6. テール再帰のないクイックソート
- 7. BinaryTreeのテール再帰関数
- 8. テール再帰(継続あり)
- 9. オブジェクトによるテール再帰
- 10. テール再帰的Ocamlプログラム
- 11. テール再帰で "n-rooks"を解く
- 12. 実行中のテール再帰メソッドのスタックオーバーフロー
- 13. テール再帰 - スカラ(その他の言語)
- 14. 猫:Monadsの非テール再帰的tailRecMメソッド
- 15. スカラのテール再帰的なfindNextAndTail
- 16. プライムファクターを使用したClojureテール再帰
- 17. プロローグ、三角数字、アキュムレータ、テール再帰
- 18. 名前の再帰
- 19. 前方参照と再帰
- 20. Erlangの再帰的リスト解析
- 21. Erlangの再帰的降下パーサー
- 22. erlang対jvm(scala)再帰性能
- 23. Clojure:furの名前による再帰と再帰の比較
- 24. 変換するループ...再帰の再帰
- 25. このコードはテール再帰的ですか?
- 26. この実装はテール再帰的ですか
- 27. List + .toVectorまたはVectorでのテール再帰?
- 28. Scalaでのテール再帰的な機能的ポーリング
- 29. 再帰的Vs反復的BSTのトラバーサル
- 30. Scala/C++:入力ループではなくテール再帰関数