From a77f0d3afe5c737fe083abe9cd8cd6b1e3986fe3 Mon Sep 17 00:00:00 2001 From: DarkWarrior703 <56077342+DarkWarrior703@users.noreply.github.com> Date: Fri, 24 Apr 2020 21:01:14 +0300 Subject: [PATCH] Create double_factorial Calculates the double factorial of an integer --- math/double_factorial | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 math/double_factorial diff --git a/math/double_factorial b/math/double_factorial new file mode 100644 index 000000000..5f41337f2 --- /dev/null +++ b/math/double_factorial @@ -0,0 +1,30 @@ +#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 !! */ + +unsigned long long double_factorial_iterative(unsigned int n){ + unsigned long long res = 1; + for(unsigned long long i = n; i >= 0; i -= 2){ + if(i == 0 || i == 1) return res; + res *= i; + } +} + +/* Recursion can be costly for large numbers */ + +unsigned long long double_factorial_recursive(unsigned int n){ + if(n <= 1) return 1; + return n * double_factorial_recursive(n - 2); +} + +int main() +{ + int n{}; + std::cin >> n; + assert(n >= 0); + std::cout << double_factorial_iterative(n); +}