1

製品品質の VC++ コードを記述する場合、再帰の使用は許容されますか? なぜですか、そうでないのですか?

4

5 に答える 5

6

どの時点でスタック オーバーフローが発生するかを判断する方法はありますか?

あまり。スタック スペースを使い果たすとスタック オーバーフローが発生しますが、...

  • 初期スタック サイズはプログラムで変更でき、OS/コンパイラ/etc に応じて異なる量にデフォルト設定される場合があります。
  • すでにどれだけ使用されているかは、アプリ (およびアプリが使用するライブラリ) が以前に行ったことによって異なります。これは多くの場合、予測が不可能です。
  • 各呼び出しに必要なスタックの量は、関数で何を行うかによって異なります。スタックに 1 つの整数のみを割り当てた場合、膨大な回数の再帰を実行できる可能性がありますが、スタックに 200k のバッファーを割り当てている場合は、それほど多くはありません。

私がこれまでにヒットしたのは、無限ループであるか、前述の 200k バッファーを使用したときだけです。

アプリが 100% の CPU を使用して永久にループし、強制的に強制終了するよりも、アプリがクラッシュする方がはるかに好ましいと思います (これは、Windows に SSH がないため、接続不良を介したリモート サーバー上の正しい PITA です)。

大まかなガイドライン: あなたの再帰関数は、自分自身を 10,000 回以上連続して呼び出す可能性が高いと思いますか? それとも、スタックに 200k のバッファを割り当てるような愚かなことをしていますか?

もしそうなら、心配してください。
いいえの場合は、より重要なことを続けてください。

于 2008-09-01T06:58:57.333 に答える
2

はい。しかし、決してデッドコードではありません。それはばかげているでしょう。

于 2008-09-01T06:15:28.467 に答える
0

確かに - たとえば、ツリー構造をトラバースしたい場合、他に何を使用しますか?

無限ループを作成していないことを確認するために、最大深度のようなものが必要になる場合があります。(これがあなたの例で意味がある場合)

于 2008-09-01T06:17:54.127 に答える
0

どの時点でスタック オーバーフローが発生するかを判断する方法はありますか?

あなたがどれだけ深く行くか、そして実際の再帰がどれだけ大きいかによって異なります。再帰が何をするのか理解できたと思いますか?

于 2008-09-01T06:54:29.967 に答える
0

フォルダー/ディレクトリなどのファイル構造をトラバースするには、再帰がほぼ不可欠です。

再帰を使用すると、ツリーのような構造をトラバースするのは非常に簡単です。

于 2008-09-01T06:59:14.040 に答える