#include static long fib_internal(int n, long a, long b) { if (n == 0) { return a; } else if (n == 1) { return b; } else { __attribute__((musttail)) return fib_internal(n-1, b, a + b); } } long fib(int n) { return fib_internal(n, 0, 1); } void test(int n) { printf("fib [%d] = [%ld]\n", n, fib(n)); } // static long recursion_depth(long n, long max) { // if (n >= max) { // return n; // } // __attribute__((musttail)) // return recursion_depth(n+1, max); // } int main(void) { for (int i=1; i<300; i++) { test(i); } //printf("%ld\n", recursion_depth(0, 1000000000)); }