//
//  main.m
//  Test-C
//
//  Created by Antoine Cornuéjols on 13/05/07.
//  Copyright __MyCompanyName__ 2007. All rights reserved.
//

#include <stdio.h>
#import <Cocoa/Cocoa.h>

#define maxN 50

int main(int argc, char *argv[])

{
	int n;
	int fibonacci (int);
	long int memo_fib (int);    // long int pour avoir au moins 32 bits (2 147 483 647)
	
	printf("Entrez un nombre entier\n");
	scanf ("%d", &n);
    while(n>=0)
	  {
	   printf("fib(%d) = %d \n", n, fibonacci(n));
	   printf("Entrer un nombre entier\n");
	   scanf ("%d", &n);
	  }
	  
	return(n);
}

/* Fonction Fibonacci naïve */
int fibonacci(int n)
{
	if (n==0 || n==1) return(1) ;
	else return(fibonacci(n-1) + fibonacci(n-2)) ;
}	


long int memo_fib(int i)
/* Définition d'une memo-fonction avec le tableau statique knownFib 
   (tiré de [Sedgewick, "Algorithmes en C++"], p.227)  */
{
	static long int knownFib[maxN];

	if (knownFib[i]!=0) return knownFib[i];
	if (i < 0) return 0;
	if (i==0 || i==1) return(knownFib[i]=1);
	if (i>1) return(knownFib[i]=memo_fib(i-1) + memo_fib(i-2));
}
