/* VOTE for your favorite Fibonacci function! Rank 1-3, 1 is most favorite, 3 is least favorite: */ #include #include int fib1(int n) { if (n<2) return 1; else return fib1(n-1) + fib1(n-2); } int fib2(int n, int a, int b) { if (n<2) return b; else return fib2(n-1,b,a+b); } // always call with a=1, b=1 initially int fib3(int n) { int a = 1, b = 1; int temp = 0; // for swap while (n>1) { temp = a; a = b; b = temp+b; n--; } return b; } int main(int argc, char**argv) { int n = atoi(argv[1]); printf("with non-tail recursion: %d\n", fib1(n)); printf("with tail recursion: %d\n", fib2(n,1,1)); printf("with while loop %d\n", fib3(n)); exit(0); }