これは、整数が素数かどうかをチェックするために私が書いた小さな関数です。
int prime(int x, int y = 2)
{
if(y <= x/2)
{
if((x % y) == 0)
return 0;
}
else
return 1;
return prime(x, ++y);
}
今、Visual Studio 2012 でコンパイルして、105943 のような大きな値を指定すると、スタック オーバーフロー エラーが発生し、コードが壊れます。さて、この関数は末尾再帰ではありませんか? もしそうなら、再帰呼び出しのためにスタックを維持するべきではなく、オーバーフローが発生するべきではありませんか?
ここに正確に到達していないのは何ですか?