卡特兰数算法

小爪哇 2012-10-19 10:59:27
1.卡特兰数是一种数列,以比利时的数学家欧仁·查理·卡塔兰命名。
2.卡特兰数列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……
令第n项为h(n),则:
h(0) = 1;
h(1) = 1;
h(n) = h(0)*h(n-1) + h(1)*h(n-2) + …… + h(n-1)*h(0),其中n>=2
卡特兰数的另一种形式:h(n) = C(2n,n)/(n + 1),其中n>=1
现在我想用算法表示h(n) = h(0)*h(n-1) + h(1)*h(n-2) + …… + h(n-1)*h(0);请问我该怎么设计。
不要用h(n) = C(2n,n)/(n + 1)这个的。
谢谢大家
...全文
354 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
小爪哇 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
仅供参考C/C++ code
#include<stdio.h>
#define n 5
main()
{
int a[10]={0,0,0,0,0,0,0,0,0,0};
int i,j;
a[0]=1;
a[1]=1;
for(i=2;i<n;i++)
for(j=0;j<n;j++)
if(i>j)
a[i]+=a[j]*a[i-j-1];
f……
[/Quote]
你好,这个程序好像运行量一大的话,就会出错啊。我把int改成__int64还是一样。
小爪哇 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

还是别用递归好 能不用就别用
我最近也一直郁闷 为何很多排列组合题一定得用递归
[/Quote]

嗯,谢谢;
newtee 2012-10-19
  • 打赏
  • 举报
回复
还是别用递归好 能不用就别用
我最近也一直郁闷 为何很多排列组合题一定得用递归
小爪哇 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

仅供参考C/C++ code
#include<stdio.h>
#define n 5
main()
{
int a[10]={0,0,0,0,0,0,0,0,0,0};
int i,j;
a[0]=1;
a[1]=1;
for(i=2;i<n;i++)
for(j=0;j<n;j++)
if(i>j)
a[i]+=a[j]*a[i-j-1];
……
[/Quote]
利害,那能不能用递归实现呢。
newtee 2012-10-19
  • 打赏
  • 举报
回复
具体做时候数据类型要改
还有数组要初始化为0(用一个库函数,我忘了)

newtee 2012-10-19
  • 打赏
  • 举报
回复
仅供参考
#include<stdio.h>
#define n 5
main()
{
int a[10]={0,0,0,0,0,0,0,0,0,0};
int i,j;
a[0]=1;
a[1]=1;
for(i=2;i<n;i++)
for(j=0;j<n;j++)
if(i>j)
a[i]+=a[j]*a[i-j-1];
for(i=0;i<n;i++)
printf("%d\n",a[i]);

}
小爪哇 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

h(1)=1 然后sun+=h(i)*h(n-i-1) 就行了
[/Quote]

你好,我这样设计老是不好,你可以编给我看吗
newtee 2012-10-19
  • 打赏
  • 举报
回复
i从0到n-1
newtee 2012-10-19
  • 打赏
  • 举报
回复
h(1)=1 然后sun+=h(i)*h(n-i-1) 就行了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧