Python卡特兰函数 PYthon函数

Python编程题求助

该答案为组合数学中著名的卡特兰数,其通式为C(2n,n)-C(2n,n-1)

10年积累的成都做网站、网站建设、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有南丰免费网站建设让你可以放心的选择与我们合作。

这里采用递推关系求解,即动态规划的方法

设n对父子有d[n]种出场策略,注意初值d[0]=1

因为每个孩子前面必有一个父亲与之对应

对于i对父子,遍历第j个孩子,该孩子前面有j-1个孩子,对应d[j-1]种出场策略

后面有i-j个孩子,对应d[i-j]种出场策略,则d[i]+=d[j-1]*d[i-j],最终d[n]即为所求

python代码如下:

n = int(input())

d = [0] * (n+1)

d[0] = 1

for i in range(n+1):

for j in range(i+1):

  d[i] += d[j-1] * d[i-j]

print(d[n])

运行结果如下:

望采纳~

斐波那契数列问题.输出斐波那契数列的前20项,1,1,2,3,5,8,13,21.

将2008代入通项公式(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n} 再计算 因此答案是3!

数列(sequence of number)是以正整数集为定义域的函数。

数列中的每一个数都叫做这个数列的项,排在第一位的数称为这个数列的第1项,排在第二位的数称为这个数列的第2项,以此类推,排在第n位的数称为这个数列的第n项,通常用an表示。著名的数列有斐波那契数列、三角函数、卡特兰数、杨辉三角等。

沙滩上研究数学问题,他们在沙滩上画点或用小石子来表示数。比如,他们研究过:由于这些数可以用如右图所示的三角形点阵表示,他们就将其称为三角形数。

正方形数类似地,被称为正方形数,因为这些数能够表示成正方形。因此,按照一定顺序排列的一列数称为数列。

设序列x(n)=(4,3,2,1),另一序列h(n)=(1,1,1,1),n=0,1,2,3

首先求证一个数列是:

否是等比数列必须要证明的是:

b(n)/b(n-1)=q(q=!0、n=1,2,3,4)。

所以(1)令bn=a(n+1)-an-1,可以等到b(n-1)=an-a(n-1)-1。

然后令bn和b(n-1)相比可以得到,bn/b(n-1)=a(n+1)-an-1/an-a(n-1)-1由已知可以得到,因为{an}是一个数列,并且a1=1/2,而且有这样一个点(n,2a(n+1)-an)在直线上。

所以可以得到一下的等式:n=2a(n+1)-an→an=2a(n+1)-n。现在把an=2a(n+1)-n带入前面的公式:bn/b(n-1)=1/2.所以可以证明{bn}是一个公比为1/2的等比数列。

(2)an=2a(n+1)-n。

数列

数列(sequence of number),是以正整数集(或它的有限子集)为定义域的函数,是一列有序的数。数列中的每一个数都叫做这个数列的项。排在第一位的数称为这个数列的第1项(通常也叫做首项),排在第二位的数称为这个数列的第2项,以此类推,排在第n位的数称为这个数列的第n项,通常用an表示。

著名的数列有斐波那契数列,三角函数,卡特兰数,杨辉三角等。

Python 3 简单编程+画曲线图帮助!

曲线图---

代码----

from math import factorial

import numpy as np

import matplotlib.pyplot as plt

#阶乘

def fact(n):

return factorial(n)

#Catalan公式

def cat_direct(n):

return fact(2*n) // fact(n + 1) // fact(n)

max = 20

nList = range(25)

valList = []

print "Enter the limit for Catalan numbers to be printed: 10000000000"

for i in nList:

if i = max:

val = cat_direct(i)

valList.append(val)

print "C %s is:"%i, val

else:

print "C %s is:"%i, 10000000000

valList.append(10000000000)

#---生成曲线

plt.plot(nList,valList, 'ro')

plt.axis([0, 25, 0, 10000000000])

plt.xlabel("n")

plt.ylabel("Catalan")

plt.title("Cn+1 = 2*(2n+1)*Cn/(n+2)")

plt.show()

卡特兰数用pascal怎么实现

递推怎么可能爆掉呢:

var i,n:longint;

s:int64;

begin

readln(n);

n:=n+1;

s:=1;

for i:=1 to n do

s:=s*(4*i-2)div(i+1);

writeln(s);

end.

这个算法便是递推,与效率相比,数字爆掉的可能性更大.

你说的开数组避免重复运算的叫递归.

优化方法:

定义一个数组

r:array[1..50]of int64;

递归函数改为:

function solve(x:integer):int64;

//define var

begin

if(r[x] 0)then exit(r[x]); //if solve(x) has been known, return it.

//function body

r[x]:=solve; //record the answer of solve(x)

end;

不难理解,就是每次计算出的一个函数值都存起来,下次就不用计算了.直接调用.

1-1+1-1+1-1+1... 这个无穷数列的值是什么?如何证明?

1、格兰迪级数 1 − 1 + 1 − 1 + … 的和不存在。

2、格兰迪级数1 − 1 + 1 − 1 + … 的和为1/2。

证明:针对以下的格兰迪级数

1 − 1 + 1 − 1 + 1 − 1 + 1 − 1 + …

一种求和方式是求它的裂项和:

(1 − 1) + (1 − 1) + (1 − 1) + … = 0 + 0 + 0 + … = 0.

但若调整括号的位置,会得到不同的结果:

1 + (−1 + 1) + (−1 + 1) + (−1 + 1) + … = 1 + 0 + 0 + 0 + … = 1.

用不同的方式为格兰迪级数加上括号进行求和,其级数和可以得到0或是1的值。

格兰迪级数为发散几何级数,若将收敛几何级数求和的方式用在格兰迪级数,可以得到第三个数值:

S = 1 − 1 + 1 − 1 + …,因此

1 − S = 1 − (1 − 1 + 1 − 1 + …) = 1 − 1 + 1 − 1 + … = S,即

2S = 1,

可得到S = 1/2。

扩展资料

数列的特征:

数列中的项必须是数,它可以是实数,也可以是复数。

用符号{an}表示数列,只不过是“借用”集合的符号,它们之间有本质上的区别:1.集合中的元素是互异的,而数列中的项可以是相同的。2.集合中的元素是无序的,而数列中的项必须按一定顺序排列,也就是必须是有序的。

著名的数列有斐波那契数列,三角函数,卡特兰数,杨辉三角等。

项数有限的数列为“有穷数列”(finite sequence)。

项数无限的数列为“无穷数列”(infinite sequence)。


网站名称:Python卡特兰函数 PYthon函数
转载来源:http://pwwzsj.com/article/hjhjcc.html