Skip to content

Commit 255ce86

Browse files
authored
Add Catalan sequence (TheAlgorithms#266)
1 parent f7c5b60 commit 255ce86

File tree

3 files changed

+61
-0
lines changed

3 files changed

+61
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Linq;
2+
using System.Numerics;
3+
using Algorithms.Sequences;
4+
using FluentAssertions;
5+
using NUnit.Framework;
6+
7+
namespace Algorithms.Tests.Sequences
8+
{
9+
public class CatalanSequenceTest
10+
{
11+
[Test]
12+
public void First30ItemsCorrect()
13+
{
14+
var sequence = new CatalanSequence().Sequence.Take(30);
15+
sequence.SequenceEqual(new BigInteger[] { 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440,
16+
9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020,
17+
91482563640, 343059613650, 1289904147324, 4861946401452, 18367353072152,
18+
69533550916004, 263747951750360, 1002242216651368})
19+
.Should().BeTrue();
20+
}
21+
}
22+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.Collections.Generic;
2+
using System.Numerics;
3+
4+
namespace Algorithms.Sequences
5+
{
6+
/// <summary>
7+
/// <para>
8+
/// Catalan numbers: C[n+1] = (2*(2*n+1)*C[n])/(n+2).
9+
/// </para>
10+
/// <para>
11+
/// Wikipedia: https://en.wikipedia.org/wiki/Catalan_number.
12+
/// </para>
13+
/// <para>
14+
/// OEIS:http://oeis.org/A000108.
15+
/// </para>
16+
/// </summary>
17+
public class CatalanSequence : ISequence
18+
{
19+
/// <summary>
20+
/// Gets sequence of Catalan numbers.
21+
/// </summary>
22+
public IEnumerable<BigInteger> Sequence
23+
{
24+
get
25+
{
26+
// initialize the first element (1) and define it's enumerator (0)
27+
var catalan = new BigInteger(1);
28+
var n = 0;
29+
while (true)
30+
{
31+
yield return catalan;
32+
catalan = (2 * (2 * n + 1) * catalan) / (n + 2);
33+
n++;
34+
}
35+
}
36+
}
37+
}
38+
}

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ This repository contains algorithms and data structures implemented in C# for ed
9292
* [A000027 Natural](./Algorithms/Sequences/NaturalSequence.cs)
9393
* [A000040 Primes](./Algorithms/Sequences/PrimesSequence.cs)
9494
* [A000045 Fibonacci](./Algorithms/Sequences/FibonacciSequence.cs)
95+
* [A000108 Catalan](./Algorithms/Sequences/CatalanSequence.cs)
9596
* [A000142 Factorial](./Algorithms/Sequences/FactorialSequence.cs)
9697
* [A001462 Golomb's](./Algorithms/Sequences/GolombsSequence.cs)
9798
* [A005132 Recaman's](./Algorithms/Sequences/RecamansSequence.cs)

0 commit comments

Comments
 (0)