I'm trying to recall an algorithm on Fibonacci recursion. The following:
public int fibonacci(int n) {
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
is not what I'm looking for because it's greedy. This will grow exponentially (just look at Java recursive Fibonacci sequence - the bigger the initial argument the more useless calls will be made).
There is probably something like a "cyclic argument shift", where calling previous Fibonacci value will retrieve value instead of calculating it again.
maybe like this:
this function is tail recursive. this means it could be optimized and executed very efficiently. In fact, it gets optimized into a simple loop..
I found interesting article about fibonacci problem
here the code snippet
You need to memorize the calculated value in order to stop exponential growth.
Here is an working example for faster recursion using memory.
Calculating fibonacci number
A good algorithm for fast fibonacci calculations is (in python):
If you need very fast computation, links to the libgmp and use mpz_fib_ui() or mpz_fib2_ui() functions.
duedl0r's algorithm translated to Swift:
worked example:
Say you want to have the the n'th fib number then build an array containing the preceeding numbers