diff options
| author | mo khan <mo.khan@gmail.com> | 2020-08-26 10:57:00 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-08-26 10:57:00 -0600 |
| commit | 2314691d840b0e730042902f398dabeb3d4ad527 (patch) | |
| tree | 8fdb4317e7b1b9065c078db0dd9cc4e699b669f4 | |
| parent | 00dd15b16f2629a8218220e88eab18afd09b7d44 (diff) | |
| -rw-r--r-- | fib.c | 112 |
1 files changed, 70 insertions, 42 deletions
@@ -1,64 +1,92 @@ #include <stdio.h> +#include <stdlib.h> #include <assert.h> -// data type -// unsigned int -> 0 -> (4294967296 - 1) -// int (-2147483648) --> (2147483648 - 1) -// long -> 8 byte integer +/*static unsigned long long cache[256] = {0};*/ -// 18446744073709551616 -// 1. base case -> ends the loops -// 2. recurrence -int fib(int n) +// cache[0] +// cache[1] +// +/*unsigned long long fib(unsigned int n)*/ +/*{*/ + /*if (n <= 1)*/ + /*return n;*/ + + /*return fib(n-2) + fib(n-1);*/ +/*}*/ + +/*unsigned long long fib(unsigned int n)*/ +/*{*/ + /*if (n <= 1)*/ + /*return n;*/ + + /*if (cache[n-1] == 0)*/ + /*cache[n-1] = fib(n - 1);*/ + /*if (cache[n-2] == 0)*/ + /*cache[n-2] = fib(n - 2);*/ + + /*return cache[n-2] + cache[n-1];*/ +/*}*/ + +unsigned long long fib(unsigned int n) { - if (n <= 1) { - /*printf("%d: %d + %d = %d\n", n, n, n + n);*/ + unsigned long long x = 0; // n-2 + unsigned long long y = 1; // n-1 + unsigned long long tmp = 0; + + if (n <= 1) return n; + + for (unsigned int i = 1; i < n; i++) + { + tmp = x; + x = y; + y = x + tmp; } + return y; +} - int y = fib(n - 2); - int x = fib(n - 1); - /*printf("%d: %d + %d = %d\n", n, x, y, x+y);*/ +/* +How do I represent a number that is greater +than the largest number that my computer can +represent using a primitive data type? + +1. research +2. data structures -> different way smaller problem + +218922995834555169026 + |10^1|10^0| + | 10| 1| +|2|1|8|9|2|2|9|9|5|8|3|4|5|5|5|1|6|9| 0| 2| 6| + + 100 ++010 +---- + 110 + + +*/ - return x + y; -} int main(int argc, char *argv[]) { - /*printf("%d\n", sizeof(int));*/ - /*int x = 2147483648 - 1;*/ - - /*assert(fib(-2) == 0);*/ - /*assert(fib(-1) == 0);*/ /*assert(fib(0) == 0);*/ /*assert(fib(1) == 1);*/ /*assert(fib(2) == 1);*/ /*assert(fib(3) == 2);*/ /*assert(fib(4) == 3);*/ /*assert(fib(12) == 144);*/ - /*assert(fib(25) == 0);*/ - /*assert(fib(30) == 0);*/ - /*assert(fib(35) == 0);*/ - /*assert(fib(36) == 0);*/ - assert(fib(50) == 0); - - /*printf("%d\n", fib(100));*/ - + /*assert(fib(25) == 75025);*/ + /*assert(fib(49) == 7778742049);*/ + /*assert(fib(50) == 12586269025);*/ + /*assert(fib(99) == 218922995834555169026);*/ + /*getchar();*/ + for (int i = 0; i < 50; i++) { + printf("%3d: %20llu\n", i, fib(i)); + } printf("YAY!\n"); return 0; } -// 1 bytes => 8 bits -// 4 bytes => 32 bits -// -// -//5 -/** -35: 5702887 + 3524578 = 9227465 - - -36: 9227465 + 5702887 = 14930352 - -*/ - - +// no cache: real 3m21.146s +// cache: real 0m0.001s |
