重複の可能性:
再帰の理解を向上させるためのリソース?
私は2年の経験を持つプログラマーであり、再帰に関する特定の問題を解決できると思うこともありますが、ほとんどの場合、惨めに失敗します。
再帰についての知識を学び、リフレッシュし、深めるためのリソースについて、できれば次のことをアドバイスしてください。
再帰をいつ使用するかを見つけることは、実際には非常に簡単です-重要な概念は、問題の一部は問題全体のより小さなバージョンですであることに気づくことです。例:
再帰について本当に学びたい場合は、関数型言語を選択することをお勧めします。再帰型は関数型言語の自然なプログラミングスタイルであり、「命令型」ソリューションに頼るのを避けられます。特にLISP-1(SchemeやClojureなど)をお勧めします。リストで定義されている再帰関数のいくつかはすばらしいものです。
私は再帰特有の本を知りませんが、アルゴリズム本のほとんどすべてのイントロで完全にカバーされています。
再帰を使用できる限り、couldは実質的にすべてのアルゴリズムで使用できます。一部の関数型プログラミング言語では、必須他の言語がループを使用するものに再帰を使用します。再帰を練習したい場合は、関数型言語を学ぶことは良いステップであり、チュートリアルにはたくさんの再帰の例があります。
再帰を使用することが有益な場合は、別の質問です。 2つの状況が思い浮かびます。 1つ目は、データ構造にスタックを使用している場合です。そのような状況では、再帰を使用すると自動的にスタックが提供されるため、これらの詳細について心配する必要はありません。もう1つの状況は、ネストされたループが多数ある場合、または不明なレベルのネストがある場合です。再帰により、ループのネストが非常に簡単になります。
再帰を理解する秘訣は、スタック全体を頭の中に保持しようとしないことです。一度に1つの小さな部分にのみ焦点を当てます。あなたの現在の状態について考え、より深いレベルが宣伝どおりに機能していることを信頼してください。