// Very slow, does not take advantage of overlapping subproblems
// of calculating the same Fibonacci number
// Can be improved with tabulation- dyanamic programming, q4
//
// Run Time Complexity: O(2^N)
// Space Complexity: O(N) with function stacks
int RecursiveFibonacci(int n)
{
  if (n <= 1)
    return n;

  return RecursiveFibonacci(n - 1) + RecursiveFibonacci(n - 2);
}
Exemple #2
0
int main(int argc, char *argv[], char *envp[]) {
  int n = 6;

  // Recursive Fibonacci
  int x = RecursiveFibonacci(n);
  printf("Recursive Fibonacci: %d\n", x);

  int *fib = NULL;

  // Bottom Up Fibonacci
  fib = (int *)calloc((size_t)n, sizeof(int));
  if (fib == NULL) {
    printf("Memory Allocation Error.\n");
    return -1;
  }
  x = BottomUpFibonacci(n, fib);
  printf("Bottom up Fibonacci: %d\n", x);
  free(fib);

  // Top Down Fibonacci
  fib = (int *)calloc((size_t)n, sizeof(int));
  if (fib == NULL) {
    printf("Memory Allocation Error.\n");
    return -1;
  }
  x = TopDownFibonacci(n, fib);
  printf("Top Down Fibonacci: %d\n", x);
  free(fib);

  // Non-DP Fibonacci
  x = NonDpFibonacci(n);
  printf("Non-DP Fibonacci: %d\n", x);

  // Recursive Fact
  x = RecursiveFact(n);
  printf("Recursive Fact: %d\n", x);

  int *facto = NULL;

  // DP Fact
  facto = (int *)calloc((size_t)n, sizeof(int));
  if (facto == NULL) {
    printf("Memory Allocation Error.\n");
    return -1;
  }
  x = DpFact(n, facto);
  printf("DP Fact: %d\n", x);

  return 0;
}
int main ()
{
  printf("%d", RecursiveFibonacci(20));
  return 0;
}