1. #include <stdio.h>
  2. #define MEMO 92
  3.  
  4. long long unsigned int memoize[MEMO];
  5.  
  6. void memoInit(){
  7. int i;
  8. for(i=0;i<MEMO;i++)
  9. memoize[i]=-1;
  10. memoize[0]=1;
  11. memoize[1]=1;
  12. }
  13.  
  14. long long unsigned int fib(int x){
  15. long long unsigned int ans;
  16. if(memoize[x]==-1){
  17. ans = fib(x-1) + fib(x-2);
  18. memoize[x] = ans;
  19. }
  20. return memoize[x];
  21. }
  22.  
  23. void main(){
  24. int x;
  25. memoInit();
  26. printf("Calculates Fib[x].\n");
  27. printf("Choose x < 0 to quit.\n\n");
  28. printf("x: ");
  29. scanf("%d", &x);
  30.  
  31. while(x>=0){
  32. if(x>(MEMO-1))
  33. printf("x must be less than %d\n", MEMO);
  34. else
  35. printf("Fib[%d]=%lld\n",x, fib(x));
  36. printf("x: ");
  37. scanf("%d", &x);
  38. }
  39. }