diff --git a/math/double_factorial.cpp b/math/double_factorial.cpp index 7b0d1d970..2b28a5d5a 100644 --- a/math/double_factorial.cpp +++ b/math/double_factorial.cpp @@ -1,28 +1,33 @@ -#include +/** + * @file + * Double factorial of a non-negative integer n, is defined as the product of + * all the integers from 1 to n that have the same parity (odd or even) as n. + *
It is also called as semifactorial of a number and is denoted by `!!` + */ + #include +#include -/* Double factorial of a non-negative integer n, is defined as the product of -all the integers from 1 to n that have the same parity (odd or even) as n. -It is also called as semifactorial of a number and is denoted by !! */ - +/// Compute double factorial using iterative method uint64_t double_factorial_iterative(uint64_t n) { - uint64_t res = 1; - for ( uint64_t i = n; i >= 0; i -= 2 ) { - if (i == 0 || i == 1) return res; - res *= i; - } + uint64_t res = 1; + for (uint64_t i = n; i >= 0; i -= 2) { + if (i == 0 || i == 1) return res; + res *= i; + } } -/* Recursion can be costly for large numbers */ - +/// Compute double factorial using resursive method. +//
Recursion can be costly for large numbers. uint64_t double_factorial_recursive(uint64_t n) { - if (n <= 1) return 1; - return n * double_factorial_recursive(n - 2); + if (n <= 1) return 1; + return n * double_factorial_recursive(n - 2); } +/// main function int main() { - uint64_t n{}; - std::cin >> n; - assert(n >= 0); - std::cout << double_factorial_iterative(n); + uint64_t n{}; + std::cin >> n; + assert(n >= 0); + std::cout << double_factorial_iterative(n); }