From a53ba4b8569e8cbeb9b8f5522b2a32bdac9d12dc Mon Sep 17 00:00:00 2001 From: Krishna Vedala Date: Wed, 27 May 2020 18:58:21 -0400 Subject: [PATCH] document fibonacci fast & link to fibonacci numbers --- math/fibonacci.cpp | 2 +- others/fibonacci_fast.cpp | 39 ++++++++++++++++++++++++++------------ others/fibonacci_large.cpp | 2 +- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/math/fibonacci.cpp b/math/fibonacci.cpp index 034b91970..da7736564 100644 --- a/math/fibonacci.cpp +++ b/math/fibonacci.cpp @@ -6,7 +6,7 @@ * integer as input. * \f[\text{fib}(n) = \text{fib}(n-1) + \text{fib}(n-2)\f] * - * @see fibonacci_large.cpp + * @see fibonacci_large.cpp, fibonacci_fast.cpp */ #include #include diff --git a/others/fibonacci_fast.cpp b/others/fibonacci_fast.cpp index a0b83b640..dc59742b8 100644 --- a/others/fibonacci_fast.cpp +++ b/others/fibonacci_fast.cpp @@ -1,25 +1,39 @@ -// An efficient way to calculate nth fibonacci number faster and simpler than -// O(nlogn) method of matrix exponentiation This works by using both recursion -// and dynamic programming. as 93rd fibonacci exceeds 19 digits, which cannot be -// stored in a single long long variable, we can only use it till 92nd fibonacci -// we can use it for 10000th fibonacci etc, if we implement bigintegers. -// This algorithm works with the fact that nth fibonacci can easily found if we -// have already found n/2th or (n+1)/2th fibonacci It is a property of fibonacci -// similar to matrix exponentiation. +/** + * @file + * @brief Faster computation of Fibonacci series + * + * An efficient way to calculate nth fibonacci number faster and simpler than + * \f$O(n\log n)\f$ method of matrix exponentiation This works by using both + * recursion and dynamic programming. as 93rd fibonacci exceeds 19 digits, which + * cannot be stored in a single long long variable, we can only use it till 92nd + * fibonacci we can use it for 10000th fibonacci etc, if we implement + * bigintegers. This algorithm works with the fact that nth fibonacci can easily + * found if we have already found n/2th or (n+1)/2th fibonacci It is a property + * of fibonacci similar to matrix exponentiation. + * + * @see fibonacci_large.cpp, fibonacci.cpp + */ #include #include #include +/** maximum number that can be computed - The result after 93 cannot be stored + * in a `uint64_t` data type. */ const uint64_t MAX = 93; +/** Array of computed fibonacci numbers */ uint64_t f[MAX] = {0}; +/** Algorithm */ uint64_t fib(uint64_t n) { - if (n == 0) return 0; - if (n == 1 || n == 2) return (f[n] = 1); + if (n == 0) + return 0; + if (n == 1 || n == 2) + return (f[n] = 1); - if (f[n]) return f[n]; + if (f[n]) + return f[n]; uint64_t k = (n % 2 != 0) ? (n + 1) / 2 : n / 2; @@ -28,10 +42,11 @@ uint64_t fib(uint64_t n) { return f[n]; } +/** Main function */ int main() { // Main Function for (uint64_t i = 1; i < 93; i++) { - std::cout << i << " th fibonacci number is " << fib(i) << "\n"; + std::cout << i << " th fibonacci number is " << fib(i) << std::endl; } return 0; } diff --git a/others/fibonacci_large.cpp b/others/fibonacci_large.cpp index 6b556066a..4545fdc9f 100644 --- a/others/fibonacci_large.cpp +++ b/others/fibonacci_large.cpp @@ -7,7 +7,7 @@ * Took 0.608246 seconds to compute 50,000^th Fibonacci * number that contains 10450 digits! * - * @see fibonacci.cpp + * @see fibonacci.cpp, fibonacci_fast.cpp */ #include