|
|
|
|
|
by NAFV_P
4434 days ago
|
|
> Well, that's because it's an awful way to calculate a fibonacci number! To be more precise, it is an inefficient method of calculating a Fibonacci number. Using your function, if you were to measure the execution time of fib(n), then divide it by the execution time of fib(n-1), would you get a more precise value of the Golden ratio? > This is much faster and won't blow up your stack quite so much. Or we could use an iterative version ... wait up your code changed to an iterative implementation. Man that's weird. EDIT: Your code: unsigned long long fib(int a) {
unsigned long long x, y, temp;
while (a > 0) {
temp = x;
x = y;
y = y + temp;
--a;
}
return y;
}
I just noticed: x, y and temp have not been initialised. |
|
Sorry about the code change, the first version was from an old memory and the new version is what happened after I stared at it for a while :) Primitive values are automatically initialized to 0 in C. As for the ratio, it will probably just give a good approximation of 1 as a gets large! Also if you have a good square root function, you can use it to find a Fibonacci number in constant time, so your ratio will always be 1 (until the square root is too big to be computed in a single instruction).