// 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); }
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; }