最近、いくつかの異なる場所で、「学校で再帰について学びましたが、それ以来、再帰を使用したことも、その必要性を感じたこともありません」というコメントを目にしました。(再帰は、特定のプログラマーグループの間で「本の学習」の人気のある例のようです。)
確かに、JavaやRuby [1]などの命令型言語では、スタックオーバーフローのリスクがあるため、また、これらの言語のほとんどのプログラマーが慣れているスタイルであるため、通常、反復を使用して再帰を回避します。 。
厳密に言えば、そのような言語では再帰を「必要に応じて」使用することはできないことを今私は知っています。どんなに複雑なことが起こっても、再帰を反復に置き換えることができます。ここで「必要」とは、次のことを意味します。
再帰が反復よりもはるかに優れていて(明快さ、効率などの理由で)、とにかく再帰を使用し、反復への変換が大きな損失であったような言語のコードの特定の例を考えてみてください。
再帰的に歩く木は、回答の中で何度か言及されています。ライブラリで定義されたイテレータを使用するよりも再帰を改善したのは、その特定の使用について正確に何でしたか。
[1]:はい、これらもオブジェクト指向言語であることを私は知っています。ただし、これはこの質問には直接関係ありません。