61 lines
1.3 KiB
C++
61 lines
1.3 KiB
C++
#if !defined __ALGORITHMS_H__
|
|
#define __ALGORITHMS_H__
|
|
|
|
namespace rosetta
|
|
{
|
|
namespace catalanNumbers
|
|
{
|
|
namespace detail
|
|
{
|
|
|
|
class Factorial
|
|
{
|
|
public:
|
|
unsigned long long operator()(unsigned n)const;
|
|
};
|
|
|
|
class BinomialCoefficient
|
|
{
|
|
public:
|
|
unsigned long long operator()(unsigned n, unsigned k)const;
|
|
};
|
|
|
|
} //namespace detail
|
|
|
|
class CatalanNumbersDirectFactorial
|
|
{
|
|
public:
|
|
CatalanNumbersDirectFactorial();
|
|
unsigned long long operator()(unsigned n)const;
|
|
private:
|
|
detail::Factorial factorial;
|
|
};
|
|
|
|
class CatalanNumbersDirectBinomialCoefficient
|
|
{
|
|
public:
|
|
CatalanNumbersDirectBinomialCoefficient();
|
|
unsigned long long operator()(unsigned n)const;
|
|
private:
|
|
detail::BinomialCoefficient binomialCoefficient;
|
|
};
|
|
|
|
class CatalanNumbersRecursiveSum
|
|
{
|
|
public:
|
|
CatalanNumbersRecursiveSum();
|
|
unsigned long long operator()(unsigned n)const;
|
|
};
|
|
|
|
class CatalanNumbersRecursiveFraction
|
|
{
|
|
public:
|
|
CatalanNumbersRecursiveFraction();
|
|
unsigned long long operator()(unsigned n)const;
|
|
};
|
|
|
|
} //namespace catalanNumbers
|
|
} //namespace rosetta
|
|
|
|
#endif //!defined __ALGORITHMS_H__
|