Python不遵循PEMDAS的顺序?

时间:2015-09-25 21:18:33

标签: python multiplication catalan

我正在编写一个用于家庭作业的加泰罗尼亚数字生成器,我正在pytohon做一个递归程序。

该计划:

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)

返回5832,这是错误的答案,但

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)

给了我16796,这是正确答案。

python不遵循PEMDAS吗?

1 个答案:

答案 0 :(得分:2)

就像PEMDAS一样,python从左到右评估表达式。它评估(4*n-2)/(n+1),存储它(调用结果X),然后计算X/catalan(n-1)

问题是,X的价值是多少?对于n的所有值,(4*n-2)/(n+1)不是整数,但是如果传入n的值为int ,则表示您正在执行整数除法。结果是计算的小数部分被丢弃,并且您的计算偏离了轨道。

第二次迭代是有效的,因为加泰罗尼亚函数的一个属性是(4*n-2)*catalan(n-1)表达式将是n-1的倍数。这样,您将(可能是破坏性的)除法留给表达式的末尾,并且计算的数学属性可以保存您。