#include<stdlib.h>
#include<stdio.h>

/* Computes the n-th Fibonacci number */
int fibonacciRec(int n);
int fibonacciIter(int n);

int NUM_ADDS;

int main(int argc, char *argv[])
{
  if(argc != 2)
  {
    printf("usage: a.out n\n");
    exit(-1);
  }
  int n = atoi(argv[1]);
  NUM_ADDS = 0;
  printf("Recursive Version: Fib(%d) = %d\n",n,fibonacciRec(n));
  printf("\tThat required %d additions\n",NUM_ADDS);
  NUM_ADDS = 0;
  printf("Iterative Version: Fib(%d) = %d\n",n,fibonacciIter(n));
  printf("\tThat required %d additions\n",NUM_ADDS);
}

int fibonacciIter(int n)
{
  int i, a, b, c;
  if(n < 0)
    return -1;
  else if(n == 0)
    return 0;
  else if(n == 1)
    return 1;

  a = 0;
  b = 1;
  for(i=2; i<=n; i++)
  {
    c = a + b;
    NUM_ADDS++;
    a = b;
    b = c;
  }
  return c;
}

int fibonacciRec(int n)
{
  if(n < 0)
    return -1;
  else if(n == 0)
    return 0;
  else if(n == 1)
    return 1;
  else
  {
    NUM_ADDS++;
    return fibonacciRec(n-1) + fibonacciRec(n-2);
  }
}


