次のコードをコンパイルするために、cygwin gcc バージョン 4.5.3 を使用しています。
/* recursion.c */
int factorial_aux(int n, int t) {
if (n <= 1) {
return t;
} else {
return factorial_aux(n-1, n*t);
}
}
int factorial(int n) {
factorial_aux(n, 1);
}
int main() {
int result = factorial(4);
printf("%d\n", result);
}
プログラム compile を次のように実行するとgcc recursion.c -o recursion.exe
24 が出力されますが、次のようにコンパイルするとgcc -O2 recursion.c -o recursion.exe
0 が出力されます。
誰かがなぜ異なる結果になるのか教えてもらえますか? それを修正する可能な方法はありますか?
ありがとう!