2017-01-17 2 views
1

私はITで2年間の経験を持っています。再帰的なコードは見ていません。プロダクション環境で再帰的コードを使用する企業や組織があるかどうかを知りたい。一部の人がユースケースについても説明してくれれば素晴らしいだろう。誰がいつ生産環境で再帰コードを使用する

+1

umm ...例えば、あなたがlispやスキームで開発している場合、再帰を使うことができなければ、あなたはかなり戸惑うでしょう。 – bolov

+3

Web開発者がC++コードを本番環境で見たことがない場合、C++が使用されているわけではありません。 ITはそのような大きな分野であり、事実上すべてのパラダイムの正当な使用法を見つけることができます – bolov

+0

@bolov再帰は常に反復で置き換えることができるため、再帰を使用する必要があります(再帰的に関数を呼び出さなければ意味がありません)とても厳しい;-))。しかし、多くの再帰的なデータ構造は再帰的な関数で美しく扱えることは事実です。しかし、繰り返し処理は、通常、スタックオーバーフローという観点からは速く、危険性は低いという事実もあります。 –

答えて

1

バリデーションテンプレートを使用するすべてのコードは必ず再帰を使用します。 http://kevinushey.github.io/blog/2016/01/27/introduction-to-c++-variadic-templates/

this questionへの回答には、いくつかの再帰の例があります。最も説得力のあるものは、再帰的に定義された言語(Cや他のほとんどの場合、ブロックにはブロックや式の式などが含まれる)の手作業でコンパイルされたコンパイラ(またはパーサー)実装です。おそらくそれは私がCSコースでそれをしたので、私にとって最も説得力のあるものに過ぎません。ここでも、生産コンパイラはツールで作成され、再帰的ではない可能性があります。誰かがgccや他のオープンソースコンパイラの内部動作を明らかにしてくれたら、私はそれを感謝します。

一般的には、再帰的なデータ構造を処理するプログラムの中には、シンプルでエレガントであるという理由だけで再帰を使用するものがあります。再帰の最大の障害。

考えてみると、私は実際には、-eval <file>というオプションを持つ内部カスタムプログラムの単純な「オプション言語」を解析するために再帰を使用しました。参照ファイルにはより多くのオプションが含まれています(-eval)。参照されるファイルは実際には単純に再帰的に評価されます。

+1

あなたのアバターのフラクタルは再帰的に生成される可能性が最も高いです。 – bolov

+0

@bolov実際には、私が正しく覚えていれば、数学は再帰的ですが(ステップnの出力はステップn + 1の入力として使用されます)、私の実装は反復的です。その理由は、結果を達成するために何万回もの反復が必要であるためです。 –

+0

まあ...それは生産環境ではなく、数えられません! (ちょっと冗談:)) – bolov

0

あなたの情報のために、私は本番環境で多数の再帰的コードを記述するために使用していた私の初期の頃にIT企業に就いていました。あなたが望むならば、それ以上のコーダーに依存します。いくつかの再帰的コード例を送ることができます。

+0

例は必要ありません。私はちょうど興味があります、どんな状況で誰かが何か別のアプローチではなく再帰と行く必要があります。 – shubham12511

+1

@ sbmc7あなたは文字通り「再帰的コードを使用する会社または組織があるかどうか知りたいですか?」と尋ねました。そしてsmnは「はい、私たちはしました!これは明らかに質問に正確に答えます。この答えが気に入らない場合は、「どのような状況で誰かが別のアプローチではなく再帰を行う必要がある」という質問に言い換えることができます。これははるかに興味深い質問です。これまで再帰を使用していた企業はありません。 –

+1

@ sbmc7私は、プロセス2が完了するまで実行できないプロセスproc1を持っているようなシナリオを持っているという例を挙げておきます(これは、多くの代替アプローチはありません)。だから私はトリックを書いた1つのメインプロセスを書きました.1つのelse文は、プロセス2が正常に実行され、プロセス1だけが実行するスロットを持っていて、2分間スリープ状態になり、再度呼び出します。それはあなたのために今はっきりしていることを望みます。 –

1

プログラムが基本的にCRUD(作成、検索、更新、削除)画面である種のデータベースとのインタフェースを持つ場合、再帰呼び出しはほとんどありません。そして、それは真剣で現実世界のプログラミングの多くです。

しかし、多数のプログラムにはツリーがあります。例えば。アートワークツリー、または3Dアニメートされたオブジェクトツリー。一度木を扱うと、再帰は問題を解決する最も簡単な方法です。

反復を再帰で置き換える「関数型プログラミング」のパラダイムもあります。理論的にはいくつかの利点があり、いくつかの環境で使用されていますが、まだまだ学問的かつ実験的です。

+0

最近、機能のプログラミングは、パラレル実行(あまり共有されていないデータがある)とよく似ているため、多くの注目を集めています。 –

関連する問題