Rebol3 Code Examplex
Catalan numbers/Pascal's triangle
Compute Catalan numbers via Pascal’s triangle.
Rebol [
title: "Rosetta code: Catalan numbers/Pascal's triangle"
file: %Catalan_numbers-Pascal's_triangle.r3
url: https://rosettacode.org/wiki/Catalan_numbers/Pascal's_triangle
]
catalan-number: function [
"Compute the nth Catalan number using the product formula:"
"C(n) = product((n+k)/k) for k in 2..n"
n [integer!]
][
nm: dm: 1.0 ;; accumulate numerator and denominator as decimals to avoid integer overflow
repeat k n [
if k >= 2 [ ;; product starts at k=2; k=1 contributes (n+1)/1 which is handled by nm/dm=1
nm: nm * (n + k) ;; multiply numerator by (n+k)
dm: dm * k ;; multiply denominator by k
]
]
to integer! nm / dm ;; divide and convert back to integer (result is always whole)
]
;; Build a block of the first 15 Catalan numbers using collect/keep
probe result: collect [ repeat n 15 [keep catalan-number n] ]