我正在为家庭作业编写一个加泰罗尼亚数字生成器,我正在用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,这是正确的答案。
所以蟒蛇不遵循PEMDAS吗?
发布于 2015-09-25 21:30:50
与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的倍数。这样,将(可能具有破坏性的)除法留给表达式的末尾,计算的数学属性就可以拯救您。
https://stackoverflow.com/questions/32790803
复制相似问题