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

int chooseRec(int n, int k);
int chooseIter(int n, int k);
int factorial(int n);

int main(int argc, char *argv[])
{
  if(argc != 3)
  {
    printf("usage: a.out n k\n");
    exit(-1);
  }
  int n = atoi(argv[1]);
  int k = atoi(argv[2]);

  printf("Recursive Version: %d choose %d = %d\n",n,k,chooseRec(n,k));
  printf("Iterative Version: %d choose %d = %d\n",n,k,chooseIter(n,k));
}

int factorial(int n)
{
  int i, prod;
  prod = 1;
  for(i=1; i<=n; i++)
    prod *= i;
  return prod;
}

int chooseIter(int n, int k)
{
  return factorial(n) / (factorial(n-k) * factorial(k));
}

int chooseRec(int n, int k)
{
  if(k == 0)
    return 0;
  else if(k == 1)
    return n;
  else if(k > n)
    return 0;
  else
    return chooseRec(n-1,k) + chooseRec(n-1,k-1);
}
