c++ - 计算第 n 个加泰罗尼亚数

标签 c++ recursion numbers catalan

我写了一些代码来计算第 N 个加泰罗尼亚语数。但是,当 N=20 及以后时,它不会返回正确的结果。 N<20 时的结果是正确的,所以我不确定哪里出了问题。

所以,当 N=20 时,它应该返回 6564120420,但它为我返回了 2269153124。

有人能指出我正确的方向吗?

#include <iostream>

using namespace std;

unsigned long int countTree(unsigned int N)
{
    //used to store catalan numbers
    unsigned long int catalan[N+1];

    //N(0)=N(1)=1
    catalan[0]=catalan[1]=1;    
    int i,j;

    for(i=2;i<=N;i++)
    {
        catalan[i]=0;
        for(j=0;j<i;j++)
        {
            catalan[i]+=catalan[j]*catalan[i-j-1];
        }
    }
    return catalan[N];
}

int main()
{
    unsigned int x;
    cout<<"Input N:"<<endl;
    cin>>x;
    unsigned long int result=countTree(x);
    cout<<result<<endl;
    return 0;
}

最佳答案

您超出了这些变量类型允许您存储的最大大小。

long long 类型是最好的选择。

您可以在这里查看不同类型整数的最大值:http://www.cplusplus.com/reference/climits/

关于c++ - 计算第 n 个加泰罗尼亚数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539844/

相关文章:

c++ - 在 32 位和 64 位中使用 for 循环反向迭代容器/字符串的元素而不发出警告

c++ - 使用 MsDev 将 linux 套接字应用程序移植到 windows

c++ - 为什么删除的内存无法重用

c# - 查找嵌套和排序

c - 在 C 中使用三元运算符计算第二大数字(3/4 数字)?

c++ - Win32API : How to determine if EN_CHANGE was because of user action, 不是软件 Action ?

java - 这会导致堆栈溢出错误吗?

用于时间递归函数的 Python 装饰器

numbers - 遗传编程中的实数(常数)

php - 如何随机化 1 到 10 之间的值以获得实际评级?