我想编写一个程序,打印出小于或等于100000的所有加泰罗尼亚数字。
由cn=1
和cn1 = ((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') 回溯(最近一次调用最后一次):
文件“”,第1行,in runfile('C:/Users/Admin/Desktop/cpy/ex_cat_numbe.py',wdir ='C:/ Users / Admin / Desktop / cpy')
文件“C:\ Users \ Admin \ Anaconda3 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py”,第710行,在runfile中 execfile(filename,namespace)
文件“C:\ Users \ Admin \ Anaconda3 \ lib \ site-packages \ spyder \ utils \ site \ sitecustomize.py”,第101行,在execfile中 exec(compile(f.read(),filename,'exec'),namespace)
文件“C:/Users/Admin/Desktop/cpy/ex_cat_numbe.py”,第11行,在 cn1 =((4(n + 2)/(n + 2)))* cn
TypeError:'int'对象不可调用
答案 0 :(得分:1)
您的错误在第4行:
cn1 = ((4(n+2)/(n+2)))*cn
您应该*
加倍4
和(n+2)
。就这样,你试着拨打号码4,就像你调用函数一样()。
但是您的代码中存在第二个问题。您没有更改while循环中的cn1
变量。它将始终保持相同的值。
在打印结果后尝试编写以下行:
cn = cn1
答案 1 :(得分:1)
您没有使用正确的公式计算加泰罗尼亚数字。以下是打印小于或等于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。