卡特兰数是组合数学中的一个重要概念。

卡特兰数可以解决以下四种典型的问题:

1.括号化问题 矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)

2.出栈次序问题 一个无穷大堆栈的进栈序列为1,2,3,..n,有多少个不同的出栈序列?

3.凸多边形三角划分问题 将一个凸多边形区域分成三角形区域的方法数?

4.给定节点组成二叉树 给定N个节点,能构成多少种不同的二叉树?

卡特兰数递推式有各种形式。这里使用以下的递推式计算卡特兰数列的第n项。

c(n)=c(n-1)*(4*n-2)/(n+1);

程序中给出了递归和递推两种方法实现的计算卡特兰数的函数。

程序中使用unsigned long long类型定义变量,可以尽可能算出更大一些的卡特兰数。

程序如下:

/* 计算catalan数函数 */#include <stdio.h>unsigned long long catalannumber1(int n)
{if(n == 0)return 1;elsereturn (4 * n - 2) * catalannumber1(n-1) / (n + 1);
}unsigned long long catalannumber2(int n)
{unsigned long long cn = 1;int i;for(i=1; i<=n; i++)cn = (4 * i - 2) * cn / (i + 1);return cn;
}int main(void)
{int i;for(i=0; i<=30; i++)printf("%d %lld %lld\n", i, catalannumber1(i), catalannumber2(i));return 0;
}

计算结果如下:

0 1 1
1 1 1
2 2 2
3 5 5
4 14 14
5 42 42
6 132 132
7 429 429
8 1430 1430
9 4862 4862
10 16796 16796
11 58786 58786
12 208012 208012
13 742900 742900
14 2674440 2674440
15 9694845 9694845
16 35357670 35357670
17 129644790 129644790
18 477638700 477638700
19 1767263190 1767263190
20 6564120420 6564120420
21 24466267020 24466267020
22 91482563640 91482563640
23 343059613650 343059613650
24 1289904147324 1289904147324
25 4861946401452 4861946401452
26 18367353072152 18367353072152
27 69533550916004 69533550916004
28 263747951750360 263747951750360
29 1002242216651368 1002242216651368
30 3814986502092304 3814986502092304

I00020 计算卡特兰数函数相关推荐

  1. Catalan卡特兰数

    卡特兰数是组合数学中一个常出现在各种计数问题中的数列,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42- 计算卡特兰数的通项公式:h(n)=C(2n,n)/(n+1) 卡特兰数的应 ...

  2. 用函数计算两数之和和两数之积

    函数的优点 函数是面向过程编写的最重要的语法结构 在工程上函数可以使我们的代码更具有结构性,更加美观 函数也可以提升我们的代码可维护性 运用函数计算两数之和和两数乘积 int MyAdd(int _x ...

  3. 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...

  4. 用python实现一个计算Fibonacci数的函数

    [问题描述]要求实现一个计算Fibonacci数的函数,并利用其实现另一个函数--输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目.所谓Fibonacci ...

  5. linux-shell脚本-利用shell函数计算两数之和--思考return原理

    一.实例1(错误代码) 在shell脚本的学习过程中,遇到定义一个带有return语句的函数,来计算两数之和,代码如下: #!/bin/bash funWithReturn(){echo " ...

  6. 数据结构 | 算法中的卡特兰数的应用

    卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 一.简单介绍 输入一个整数n,计算h(n). 令h(0)=1,h(1)=1, Catalan数满足递推式:h(n)= ...

  7. 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南

    转自:从<编程之美>买票找零问题说起,娓娓道来卡特兰数--兼爬坑指南 引子: 大约两个月前,我在练习一些招聘的笔试题中,有一道和卡特兰数相关.那时还没来得及开始仔细看<编程之美> ...

  8. 5. 卡特兰数(Catalan)公式、证明、代码、典例.

    1. 定义 卡特兰数(卡塔兰数),英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列. 其前几项为(从第零项开始) : C0 = 1, C1 = 1, C2 = 2, ...

  9. 卡特兰数(Catalan)公式、证明、代码、典例.

    本文部分转自https://www.cnblogs.com/yuzilan/p/10626072.html,这位大牛对于卡特兰数的剖析可以说是非常非常详细了!感谢前辈的分享! 1. 定义 卡特兰数(卡 ...

最新文章

  1. 第十二周项目1-阅读程序(三)
  2. Symantec Backup Exec System Recovery还原向导
  3. java如何使用配置文件_如何使用java.util.Properties读取配置文件?
  4. vmware启动多个虚拟机
  5. 计算机扬天m400c联想,【联想扬天M参数】联想扬天M系列台式电脑参数-ZOL中关村在线...
  6. 阿里云视频云「 vPaaS 」演绎了怎样的音视频应用开发「未来图景」
  7. Excel2003怎样拆分单元格
  8. 最新美团JS逆向分析(_token参数)
  9. UNIX系统V(System V)
  10. b站pink老师JavaScript的PC端网页特效 案例代码——引用animate.js案例
  11. python和机器人_python 机器人
  12. 项目反应理论 matlab,IRTPRO | 项目反应理论软件
  13. 黑群晖 无法关机_教你无U盘引导实现黑群晖6.1.3 15152,打造属于自己的私人云空间...
  14. appinventor跑酷游戏_基于APPInventor的一款益智游戏的设计与实现
  15. 商业贷款买房的7个步骤
  16. Python:loc和iloc的区别
  17. python登录网页后抓取数据_Python抓取网页数据的终极办法
  18. PF_RING 6.0.2在Redhat 6.3 x86_64上编译和安装
  19. Mysq大小比较EQ、NE、GE、GT、LE、LT
  20. 陆奇:冬天过后一定是春天,首先要活下来

热门文章

  1. Unity AssetBundle 爬坑手记
  2. C#图片处理之:亮度和对比度的校正
  3. 广东学考计算机专业要多少排位,太难了!2021年学考录取分数大暴涨!深职、广轻需要300分以上?...
  4. python分配问题_1.1python解决数学建模之席位分配问题
  5. destoon php文件,Destoon模板制作简明教程
  6. 使用Navicat Premium 同步 测试数据库 与 正式数据库 数据
  7. dlink虚拟服务器端口转发,D-Link路由器端口转发怎么设置【图文教程】
  8. android list 替换元素_Java学习之List集合
  9. rgb颜色查询工具_《我的眼睛–图灵识别》第三章:基础:颜色识别
  10. Python——EM(期望极大算法)实战(附详细代码与注解)(二)