/*
 * Author: IcarusTheFly (https://github.com/IcarusTheFly)
 * Catalan Numbers explanation can be found in the following links:
 * Wikipedia: https://en.wikipedia.org/wiki/Catalan_number
 * Brilliant: https://brilliant.org/wiki/catalan-numbers
 */

/**
 * @function catalanNumbers
 * @description Returns all catalan numbers from index 0 to n
 * @param {number} n
 * @returns {number[]} Array with the catalan numbers from 0 to n
 */

export const catalanNumbers = (n) => {
  if (n === 0) {
    return [1]
  }
  const catList = [1, 1]

  for (let i = 2; i <= n; i++) {
    let newNumber = 0
    for (let j = 0; j < i; j++) {
      newNumber += catList[j] * catList[i - j - 1]
    }
    catList.push(newNumber)
  }

  return catList
}