RosettaCodeData/Task/Catalan-numbers/Nim/catalan-numbers.nim
2016-12-05 23:44:36 +01:00

33 lines
641 B
Nim

import strutils
proc binomial(m, n): auto =
result = 1
var
d = m - n
n = n
m = m
if d > n:
n = d
while m > n:
result *= m
dec m
while d > 1 and (result mod d) == 0:
result = result div d
dec d
proc catalan1(n): auto =
binomial(2 * n, n) div (n + 1)
proc catalan2(n): auto =
if n == 0:
result = 1
for i in 0 .. <n:
result += catalan2(i) * catalan2(n - 1 - i)
proc catalan3(n): int =
if n > 0: 2 * (2 * n - 1) * catalan3(n - 1) div (1 + n)
else: 1
for i in 0..15:
echo align($i, 7), " ", align($catalan1(i), 7), " ", align($catalan2(i), 7), " ", align($catalan3(i), 7)