新しい GCC だと、単なる一次式の計算に…。
$ cat test.c
#include <stdio.h>
#include <limits.h>
int f(int n, int m)
{
return (n ? f(n - 1, m + 2) : m);
}
int main(void)
{
printf("%d\n", f(INT_MAX, 1));
}
$ gcc -O2 test.c
$ time ./a.out
-1
real 0m0.001s
user 0m0.000s
sys 0m0.000s