#include #include #include #include #include uint64_t *results; uint64_t *result_len; unsigned int fib(int x){ if(x < *result_len) return results[x]; if (x < 2) { return 1; } else { uint64_t result = fib(x-1) + fib(x-2); results[x] = result; if(x < *result_len) (*result_len)++; return result; } } int main(){ int fd = open("fib_results", O_RDWR); result_len = mmap(0, 101 * sizeof(uint64_t), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); results = result_len + 1; printf("%d\n", fib(50)); return 0; }