だから私はCで再帰をいじっていましたが、なぜこれが起こっているのかわかりません:
コードA
int foo(int x)
{
if (x==0) return 0;
else return foo(--x)+x;
}
int main() { printf("%d\n", foo(10));
コード B
int foo(int x)
{
if (x==0) return 0;
else return foo(x--)+x;
}
int main() { printf("%d\n", foo(10));
コード A は 55 ではなく 45 を出力し、私はそれを理解しました。これは、再帰呼び出しが次のように巻き戻されるためです。9+8+7+...+0 = 45
一方、コード B はスタックし、プロンプトに戻りません!! 私はそれをしなければctrl+c
なりません。なぜ行き詰まるのですか?10を超えて減少しないためですか?