DSA/algorithms/C/maths/fibonacci-number
Ming Tsai d34acc78b0 docs: fix typos 2022-08-20 11:48:26 -04:00
..
src chore(CPlusPlus): add reverse number algorithm (#789) 2022-08-11 14:52:36 -04:00
.gitignore chore(C): add fibonacci algorithm (#794) 2022-08-10 17:18:21 -04:00
Makefile chore(C): add fibonacci algorithm (#794) 2022-08-10 17:18:21 -04:00
README.md docs: fix typos 2022-08-20 11:48:26 -04:00

README.md

Fibonacci Number

Fibonacci numbers form a Fibonacci sequence where given any number (excluding first 2 terms) is a sum of its two preceding numbers. Usually, the sequence is either start with 0 and 1 or 1 and 1. Below is a Fibonacci sequence starting from 0 and 1:


0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, \dots

The problem is to calculate the n-th term Fibonacci number given two starting numbers.

Prerequisites

  • C compiler (or IDE)
  • MAKE software (optional if you compile the source files manually)

Instructions

  • using makefile
     make # or mingw32-make
    
  • compile using gcc
    cd <path>\fibonacci-number
    gcc .\src\main.c
    

Note

The sequence can be described by a recurrent function as below:


\begin{align*}
  F(0) &= 0 \\
  F(1) &= 1 \\
  F(n) &= F(n-1) + F(n-2)
\end{align*}
  • This provides a direct recursive implementation. The time complexity is O(2^n). It can be improved through memomization.
  • It can done iteratively using 2 more states variables. The time complexity is O(n).
  • There exists a clever logarithmic algorithm O(\log{n}) in computing n-th term Fibonacci number. The computations can be in form of matrix multiplication, then we can devise some form of Ancient Egyptian multiplication (i.e.: double and squaring) to improve the algorithm. reference
  • Lastly, there also exist a formula to approximate n-term Fibonacci number O(1). reference

The given implementations shall assume that the Fibonacci sequence is starting from 0 and 1. The reader may try to generalize it to certain extent as a practice.

Test Cases & Output

  1. Example output of calling function:
/* some code */
printf("%d", iter_fib(7));
printf("%d\n", memo_fib(7));
/* some code */
13
13
  1. The code should yield the same output as other version.

  2. The sum of even Fibonacci numbers below 4000000 should be 4613732. Adapted from Project Euler.net