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;
}