Python不遵循PEMDAS的顺序?

Python不遵循PEMDAS的顺序?,python,multiplication,catalan,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

我正在为家庭作业编写一个加泰罗尼亚数字生成器,我正在用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吗?

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

问题是,
X
的值是多少
(4*n-2)/(n+1)
不是n的所有值的整数,但是如果您传入的是一个值
n
,这是一个python
int
,那么您正在执行整数除法。结果是,计算的小数部分被丢弃,并且您的计算偏离了轨道


由于加泰罗尼亚函数的一个属性,
(4*n-2)*catalan(n-1)
表达式将是
n-1
的倍数,因此第二次迭代有效。这样,您就可以将(潜在破坏性的)除法保留在表达式的末尾,而您的计算的数学特性可以节省您的时间

你必须详细说明。。。粗犷的巨蟒跟随着彭达斯。。。也许你不太理解pemdas的m==d和a==s,所以它们是简单的从左到右的操作