再帰メソッドが特定の量のメモリで達成できる最大呼び出し深度を推定する目的で、スタック オーバーフロー エラーが発生する可能性が高くなる前に使用されるメモリを計算するための (概算) 式は何ですか?
編集:
多くの人が「場合による」と答えていますが、これは合理的です。そのため、些細だが具体的な例を使用して、いくつかの変数を削除しましょう。
public static int sumOneToN(int n) {
return n < 2 ? 1 : n + sumOneToN(n - 1);
}
私の Eclipse IDE でこれを実行すると、n
1000 をわずかに下回ります (私には驚くほど低い) ことは簡単に示せます。この呼び出しの深さ制限は、実行せずに見積もることができますか?
998
編集: Eclipse の最大呼び出し深度は 1000 に固定されていると思わずにはいられません1000
。これは「丸すぎる」数字であり、偶然とは言えません。さらに調査します。-Xss vm パラメータの Dux オーバーヘッドがあります。これは最大スタック サイズであるため、Eclipse ランナーは-Xss1000
どこかに設定されている必要があります