深い再帰を使用するアルゴリズムがあります。再帰がどれだけ深いレベルになるかは、入力によって異なります。スタックオーバーフローの例外を避けるために、私は深さのカウントを保持し、特定の深さで終了します。.NETでスタックオーバーフロー例外が発生する要因は何ですか?
私はこれまで、少しレベルを上げて、500点を止めることを決めました。しかし、突然、突然300を超えるレベルでスタックオーバーフローの例外が発生します。
これに影響を与える要因は誰か分かりませんか?それは? CPUとRAM?または、他のどのプロセスがコンピュータ上で実行されているかと関連していますか?
任意の時点で「安全に」終了できるのであれば、なぜそれほど深く進む必要がありますか? –
これはあなたの質問に直接答えるものではありませんが、F#(C#/ VBとは異なります)はテールコール再帰をサポートしているため、スタックオーバーフローの例外を受けずに正しく書かれた再帰アルゴリズムを無限に繰り返すことができます。あなたのアルゴリズムをF#で書いて、今使っている言語から呼び出すことは価値があるかもしれません。 –
@Joel:Nitpick:F#は、テールコール再帰呼び出しを効果的に繰り返しステートメント(ループ)に変換して最適化します。NET言語はテールコール再帰をサポートしていますが、自動的には変換しません。詳細については、この回答を参照してください:http://stackoverflow.com/questions/310974/what-is-tail-call-optimization/310980#310980 –