mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Create double_factorial
Calculates the double factorial of an integer
This commit is contained in:
parent
dac7fa8b37
commit
a77f0d3afe
30
math/double_factorial
Normal file
30
math/double_factorial
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user