私が書いた次の関数は、再帰は有限ですが、スタックオーバーフローのためにプログラムをクラッシュさせました。
public static void Key(char[] chars, int i, int l, string str) {
string newStr=null;
for(int j=0; j<l; j++)
newStr+=chars[i/(int)Math.Pow(68, j)%68];
if(newStr==str)
return;
Key(chars, ++i, l, newStr);
}
これらのパラメーターを使用してメソッドを呼び出すと、すべてうまくいきます。
Key(chars, 0, 4, "aaaa");
しかし、より多くの呼び出しになると、StackOverflowException
. したがって、問題は、メソッドが有限であるにもかかわらず、メソッドのジョブが完了する前にコールスタックがいっぱいになることだと思います。それで、それについていくつか質問があります:
関数がスタックから明確にならない理由は、もはや必要ではなく、値を返さないからです。
もしそうなら、スタックを手動でクリアする方法はありますか? クラスを試してみました
StackTrace
が、この場合は無力です。