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

#define phi 1.618034

int ITER=0, REC=0;

void fibiter( int n )
{ long long a, b, c;
  int i;
  a = 0;
  b = 1;
  for( i = 2; i <=n; i++) {
    c = a + b;
    a = b;
    b = c;
    printf("\n%d %Ld %f", i, b, (float) b/a);
    if ( a > b ) printf(" -> depassement de capacite!!!"); 
  }  
  printf("\nTaille requise en bits :%f", n*log(phi)/log(2) - 1);
}

long long  fibrec( int n )
{ if ( n <=1) return n;
  return fibrec(n-1) + fibrec(n-2);
}
void fibreg( int n )
{
}


void usage( void )
{
  printf("\nusage:");
  printf("\n   -i:iteratif"); 
  printf("\n   -r:recursif"); 
  printf("\n   -h:help"); 
  printf("\n");
  exit(1);
}
void option( char *str )
{ 
  if ( *str != '-') usage(); 
  str++;
  switch( *str) {
  case 'i': str++; ITER  = atoi(str); break;
  case 'r': str++;  REC  = atoi(str); break;
  case 'h':
  default :usage();
  }
}


int main( int argc, char *argv[] )
{ int i;
  for( i = 1; i < argc; i++)
    option( argv[i] );

  if ( ITER ) fibiter( ITER );  
  if ( REC  ) printf("\nf(%d)=%Ld", REC, fibrec( REC ));

  printf("\n");
  return 0;
}

