使用递归python生成数字序列

时间:2017-03-13 20:59:39

标签: python-3.x catalan

目标是生成加泰罗尼亚数字!我的代码工作到n = 30(我在JAVA中尝试了相同的算法并且它完全正确,但是,然后python发生了一些奇怪的事情,它在n = 30之后返回错误的数字。我完全确定存在问题关于舍入或格式,但不能自己解决!

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%><%
Response.AddHeader "Content-Type", "text/html;charset=utf-8" 
%><!-- #include virtual="/conexion.asp" -->
<!DOCTYPE html>

<html lang="es">
<head>
<meta charset="utf-8">
</head>
<body>
áéíóú
</body>
</html>

1 个答案:

答案 0 :(得分:4)

通过使用/(n+1),您可以生成一个浮点数,它本质上具有有限的精度。对于出现n> 1的较大数字,此精度不够准确。 30。

所以相反,使用一个坚持整数的公式:首先乘法,然后才执行除法,整数除法:

 c_n = (4*n-2)*catalan(n-1)//(n+1)

然后也不需要施放到int,你可以这样做:

 return c_n

附注:当您在声明的else部分return时,您不需要if。所以你可以写:

def catalan(n):
    if n < 0:
        return -1
    if n == 0:
        return 1
    return (4*n-2)*catalan(n-1)//(n+1)
相关问题