I'm not looking necessarily for an answer, but I am looking for what this question is asking of. Found this question studying for an interview but not sure what they're asking?
Write function that runs through the Fibonacci sequence and returns the index that is passed in as a parameter.
I interpret the question differently....given a
number
as an input, what is theindex
of that number in the series? e.g.input=5
, then index is5
(given the sequence is0 1 1 2 3 5
where the index begins with0
)This the code is as follows (which returns the index) [Disclaimer: Adapted from the code given at http://talkbinary.com/programming/c/fibonacci-in-c/ ]
What it seems to me is that you are asked to return the the nth fibonacci no., where n is the passed parameter. You can employ various methods to answer this question, whereas all these varies in time complexity and code complexity.
Method 1 ( Use recursion ) A simple method that is a direct recusrive implementation mathematical recurance relation given above.
Time Complexity: T(n) = T(n-1) + T(n-2) which is exponential. We can observe that this implementation does a lot of repeated work (see the following recursion tree). So this is a bad implementation for nth Fibonacci number.
fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) / \ fib(1) fib(0) Extra Space: O(n) if we consider the fuinction call stack size, otherwise O(1).
Method 2 ( Use Dynamic Programming ) We can avoid the repeated work done is the method 1 by storing the Fibonacci numbers calculated so far.
Time Complexity: O(n) Extra Space: O(n)
Method 3 ( Space Otimized Method 2 ) We can optimize the space used in method 2 by storing the previous two numbers only because that is all we need to get the next Fibannaci number in series.
Time Complexity: O(n) Extra Space: O(1)
Method 4 ( Using power of the matrx {{1,1},{0,1}} ) This another O(n) which relies on the fact that if we n times multiply the matrix M = {{1,1},{0,1}} to itself (in other words calculate power(M, n )), then we get the (n+1)th Fibonacci number as the element at row and column (0, 0) in the resultant matrix.
The matrix representation gives the following closed expression for the Fibonacci numbers:
Time Complexity: O(n) Extra Space: O(1)
Method 5 ( Optimized Method 4 ) The method 4 can be optimized to work in O(Logn) time complexity. We can do recursive multiplication to get power(M, n) in the prevous method (Similar to the optimization done in this post)
Time Complexity: O(Logn) Extra Space: O(Logn) if we consider the function call stack size, otherwise O(1).
Driver Program: int main() { int n = 9; printf("%d", fib(9)); getchar(); return 0; }
References: http://en.wikipedia.org/wiki/Fibonacci_number http://www.ics.uci.edu/~eppstein/161/960109.html
firstly,you can update your base math information about Fibonacci with this link from wiki. and look at this formula for fast calculate.and you can read all of about it in this link.
This is recursive function to compute nth Fibonacci number and is of O(2^n) time:
this is better idea to compute nth Fibonacci number and is of O(n) time:
and this is the best way to compute nth Fibonacci number and is of O(log(n)) time:
this link:
As you are already suspecting, this will work very similar. Use the n-th power of the
x * x
matrixThis is easy to understand if you multiply this matrix with the vector
which results in
Matrix exponentiation can be done in O(log(n)) time (when x is considered to be constant).
For the Fibonacci recurrence, there is also a closed formula solution, see here http://en.wikipedia.org/wiki/Fibonacci_number, look for Binet's or Moivre's formula.
and look at: 1-nth fibonacci number in sublinear time
It's a very poorly worded question, but you have to assume they are asking for the nth Fibonnaci number where
n
is provided as the parameter.In addition to all the techniques listed by others, for
n > 1
you can also use the golden ratio method, which is quicker than any iterative method. But as the question says 'run through the Fibonacci sequence' this may not qualify. You'd probably also scare them to death.