unsigned long long findFib( unsigned n ) { if ( 0 == fib[n] ){ if (n < 2){ fib[n] = 1; } else { fib[n] = findFib(n - 1) + findFib(n - 2); } } return fib[n]; }
unsigned fibSearch(int key) /* Извършва Фибоначиево търсене */ { int p,q,r,k; k = findFib(n); p = fib[k-1]; q = fib[k-2]; r = fib[k-3]; if (key > m[p].key) p += n - fib[k] + 1; while (p > 0) if (key == m[p].key) return p; else if (key < m[p].key) if (0 == r) p = 0; else { int t; p -= r; t = q; q = r; r = t-r; } else if (1 == q) p = 0; else { p += r; q -= r; r -= q; } return NOT_FOUND; }
void printFib (unsigned long long n) { std::clock_t start; start = std::clock(); for(unsigned i = 0; i != n; ++i){ m.lock(); std::cout << "Fibonacci " << i + 1 << ": " << findFib(i) << " "; std::cout << (std::clock() - start) / (double)(CLOCKS_PER_SEC / 1000) << " ms" << std::endl; m.unlock(); } }
int main(){ int x, arr[SIZE]; x = enterX(); findFib(x, arr); printArr(arr); return 0; }
int main(){ int x, y; printf("Vuvedi X : "); scanf("%d", &x); getchar(); y = enterY(x); findFib(x, y); return 0; }