#! /usr/bin/env python """ catalan_recursion.py calculates the Catalan numbers via a recursive function. Catalan numbers C_0 = 1 & C_n = C_n-1 * (4n-2)/(n+1) # for n=110 C_110 = 815663960219058384462569194343901173113117297781505394610791520 Paul Eugenio PHZ4151C Jan 25, 2019 """ from __future__ import division, print_function def catalan(n): """ Catalan recursive function defined via integer arithemtic """ if n==0: return 1 else: return (4*n-2)* catalan(n-1) // (n+1) def catalan2(n): """ Catalan recursive function defined with floating division which is accurate to a precission of ~15 decimals """ if n==0: return 1 else: return int((4*n-2)* catalan(n-1) / (n+1)) # # def catalan3(n): """ Here is faulty Catalan recirsive function due to the order of the integer division """ if n==0: return 1 else: return ((4*n-2)//(n+1)) * catalan(n-1) # # main # n = int(raw_input("Enter Catalan number index: ")) print("C_",n, "\n", catalan(n),"\n", catalan2(n),"\n", catalan3(n),"\n", sep='')