i programming catalan number generator homework, , doing recursive program in pytohon.
the program:
def catalan(n): if n == 0: c_f = 1 else: c_f = ((4*n-2)/(n+1))*catalan(n-1) return c_f print catalan(10)
returns 5832, wrong answer, but
def catalan(n): if n == 0: c_f = 1 else: c_f = (4*n-2)*catalan(n-1)/(n+1) return c_f print catalan(10)
gives me 16796, correct answer.
so python not follow pemdas?
just pemdas, python evaluates expressions left right. evaluates (4*n-2)/(n+1)
, stores (call result x
), , computes x/catalan(n-1)
.
the problem is, value of x
? (4*n-2)/(n+1)
not integer values of n, if you're passing in value of n
python int
you're performing integer division. result fractional part of computation discarded, , computation goes off rails.
the second iteration works because of property of catalan function (4*n-2)*catalan(n-1)
expression multiple of n-1
. way, leave (potentially destructive) division end of expression, , mathematical properties of computation save you.
Comments
Post a Comment