Python不遵循PEMDAS的顺序?
我正在为家庭作业编写一个加泰罗尼亚数字生成器,我正在用pytohon编写一个递归程序 该方案: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
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
,这是一个pythonint
,那么您正在执行整数除法。结果是,计算的小数部分被丢弃,并且您的计算偏离了轨道
由于加泰罗尼亚函数的一个属性,
(4*n-2)*catalan(n-1)
表达式将是n-1
的倍数,因此第二次迭代有效。这样,您就可以将(潜在破坏性的)除法保留在表达式的末尾,而您的计算的数学特性可以节省您的时间 你必须详细说明。。。粗犷的巨蟒跟随着彭达斯。。。也许你不太理解pemdas的m==d和a==s,所以它们是简单的从左到右的操作