/* Бърз рекурсивен линеен вариант, запаметяващ вече пресметнатото */
unsigned long fibMemo(unsigned n) 
{ if (n < 2)
    m[n] = n;
  else if (0 == m[n])
    m[n] = fibMemo(n - 1) + fibMemo(n - 2);
  return m[n];
}
Example #2
0
MEMOIZED_FUNCT(SOME_MEMOIZATION_CONTEXT, int, fibMemo,int, a)
/* int fibMemo(int a) */
{
  if (a == 0 || a == 1 || a < 0){
    return 1;}
  else{
    return fibMemo(a-1) + fibMemo(a-2);}
}
Example #3
0
int fibMemo(int n, int *memo) {
  if (memo[n] != 0) {
    return memo[n];
  }
  if (n == 0 || n == 1) {
    memo[n] = n;
    return n;
  }
  int res = fibMemo(n-1, memo) + fibMemo(n-2, memo);
  memo[n] = res;
  return res;
}
Example #4
0
int fib(int n) {
  if (n < 0) {
    return 0;
  }
  int *memo = calloc(n+1, sizeof(int));
  int res = fibMemo(n, memo);
  free(memo);
  return res;
}
Example #5
0
int main(int argc, char *argv[])
{
  initGlobalMemoizationContexts();
  enableGlobalMemoizationContext(SOME_MEMOIZATION_CONTEXT);

  printf ("F 50 is %d\n", fibMemo(40));

  disableGlobalMemoizationContext(SOME_MEMOIZATION_CONTEXT);
  freeGlobalMemoizationContexts();

  return 0;
}
int main(void) {
  memset(m, 0, MAX * sizeof(*m));
  printf("\n%u-тото число на Фибоначи е: %lu", n, fibMemo(n));
  return 0;
}