zoukankan      html  css  js  c++  java
  • I00020 计算卡特兰数函数

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

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

    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;
        else
            return (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
    ", 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


  • 相关阅读:
    java 找不到或无法加载主类
    navicat connect error: Authentication plugin 'caching_sha2_password' cannot be loaded
    mysql command
    the diffirent between step into and step over (java)
    20181015
    Eclipse
    游戏2048源代码
    vue的生命周期
    简单快速了解Vue.js的开发流程
    C# 连接西门子PLC
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564795.html
Copyright © 2011-2022 走看看