基本加泰罗尼亚数字

Basic Catalan numbers

我想编写一个程序,打印出所有小于或等于 100000 的加泰罗尼亚数字。

这些由 cn=1cn1 = ((4n+2)/n+2)*cn(下一个值)给出。当我尝试时,出现以下错误。

我的代码是:

 cn,cn1 = 1,2
 n = 1 
 while cn1<100000:
       cn1 = ((4(n+2)/(n+2)))*cn
       print(cn1)

我的输出错误:

runfile('C:/Users/Admin/Desktop/cpy/ex_cat_numbe.py', wdir='C:/Users/Admin/Desktop/cpy') Traceback (most recent call last):

File "", line 1, in runfile('C:/Users/Admin/Desktop/cpy/ex_cat_numbe.py', wdir='C:/Users/Admin/Desktop/cpy')

File "C:\Users\Admin\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 710, in runfile execfile(filename, namespace)

File "C:\Users\Admin\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/Admin/Desktop/cpy/ex_cat_numbe.py", line 11, in cn1 = ((4(n+2)/(n+2)))*cn

TypeError: 'int' object is not callable

您的错误在第 4 行:

cn1 = ((4(n+2)/(n+2)))*cn

您应该输入 * 来乘以 4(n+2)。实际上,您正在尝试调用数字 4,就像调用 functions() 一样。

但是你的代码中还有第二个问题。您没有更改 while 循环内的 cn1 变量。它将始终保持相同的值。

打印结果后尝试写下一行:

cn = cn1

您没有使用正确的公式来计算加泰罗尼亚语数。这是打印小于或等于 100000 的加泰罗尼亚数字的代码:

# A recursive function to find nth catalan number
def catalan(n):
    # Base Case
    if n <= 1:
        return 1

    # Catalan(n) is the sum of catalan(i)*catalan(n-i-1)
    res = 0
    for i in range(n):
        res += catalan(i) * catalan(n - i - 1)

    return res


n = 0
c = catalan(n)
while c <= 100000:
    print(c)
    n += 1
    c = catalan(n)

输出:

1
1
2
5
14
42
132
429
1430
4862
16796
58786

有关代码检查的更多信息this link