mirror of
https://github.com/TheAlgorithms/C-Plus-Plus.git
synced 2026-04-04 02:59:43 +08:00
documentation for double_factorial
This commit is contained in:
@@ -1,28 +1,33 @@
|
||||
#include <iostream>
|
||||
/**
|
||||
* @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.
|
||||
* <br/>It is also called as semifactorial of a number and is denoted by `!!`
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
/* 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.
|
||||
// <br/>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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user