首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python不遵循PEMDAS的顺序吗?

Python不遵循PEMDAS的顺序吗?
EN

Stack Overflow用户
提问于 2015-09-25 21:18:32
回答 1查看 1.4K关注 0票数 1

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

该方案:

代码语言:javascript
复制
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,这是错误的答案,但是

代码语言:javascript
复制
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吗?

EN

回答 1

Stack Overflow用户

发布于 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的倍数。这样,将(可能具有破坏性的)除法留给表达式的末尾,计算的数学属性就可以拯救您。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32790803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档