mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Merge pull request #904 from kvedala/fix/double_factorial
bug fix: fix self-tests and unsigned comparision to zero
This commit is contained in:
commit
3b948d2a04
@ -1,8 +1,9 @@
|
|||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
* @brief Compute double factorial: \f$n!!\f$
|
* @brief Compute [double
|
||||||
|
* factorial](https://en.wikipedia.org/wiki/Double_factorial): \f$n!!\f$
|
||||||
*
|
*
|
||||||
* Double factorial of a non-negative integer n, is defined as the product of
|
* 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.
|
* 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
|
* <br/>It is also called as semifactorial of a number and is denoted by
|
||||||
* \f$n!!\f$
|
* \f$n!!\f$
|
||||||
@ -32,10 +33,38 @@ uint64_t double_factorial_recursive(uint64_t n) {
|
|||||||
return n * double_factorial_recursive(n - 2);
|
return n * double_factorial_recursive(n - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// main function
|
/** Wrapper to run tests using both recursive and iterative implementations.
|
||||||
int main() {
|
* The checks are only valid in debug builds due to the use of `assert()`
|
||||||
uint64_t n;
|
* statements.
|
||||||
std::cin >> n;
|
* \param [in] n number to check double factorial for
|
||||||
assert(n >= 0);
|
* \param [in] expected expected result
|
||||||
std::cout << double_factorial_iterative(n);
|
*/
|
||||||
|
void test(uint64_t n, uint64_t expected) {
|
||||||
|
assert(double_factorial_iterative(n) == expected);
|
||||||
|
assert(double_factorial_recursive(n) == expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test implementations
|
||||||
|
*/
|
||||||
|
void tests() {
|
||||||
|
std::cout << "Test 1:\t n=5\t...";
|
||||||
|
test(5, 15);
|
||||||
|
std::cout << "passed\n";
|
||||||
|
|
||||||
|
std::cout << "Test 2:\t n=15\t...";
|
||||||
|
test(15, 2027025);
|
||||||
|
std::cout << "passed\n";
|
||||||
|
|
||||||
|
std::cout << "Test 3:\t n=0\t...";
|
||||||
|
test(0, 1);
|
||||||
|
std::cout << "passed\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main function
|
||||||
|
*/
|
||||||
|
int main() {
|
||||||
|
tests();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user