我正在为加泰罗尼亚语数字生成器编程以进行作业,并且正在用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
的值是什么?对于所有n值,(4*n-2)/(n+1)
都不是整数,但是如果传入的是python n
的int
值,则您正在执行整数除法。结果是计算的小数部分被舍弃,您的计算偏离了轨道。
由于加泰罗尼亚语函数的一个属性是(4*n-2)*catalan(n-1)
表达式将是n-1
的倍数,因此第二次迭代有效。这样,您将(可能具有破坏性的)除法表达式的末尾,计算的数学属性可以为您节省。
关于python - Python不遵循PEMDAS的顺序吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32790803/