我想为加泰罗尼亚数字编写代码。加泰罗尼亚数字定义如下:
C(n) = 2n C n/(n+1)
. 但是,(2n C n)
我不想计算,而是想使用以下事实自下而上计算加泰罗尼亚数字:
Catalan(n) =
2n! /n! * n! * (n+1)
Catalan(n+1) =
2*(n+1)
--------------------------- =
(n+1)! * (n+1)! * ((n+1)+1)
(2n+2) * (2n+1) * 2n!
------------------------------- =
(n+1) * n! * (n+1) * n! * (n+2)
(2n+2) * (2n+1) * 2n!
----------------------------------- =
(n+1) * (n+2) * n! * n! * (n+1)
(2n+2) * (2n+1)
--------------- * Catalan(n)
(n+1) * (n+2)
现在利用上述事实,这是我的以下代码:
int catalan(int n)
{
if (n == 1)
return 1 //since c(1)=1 is my base case
else
return (((2*n+2) * (2*n+1))/((n+1)*(n+2))) * catalan(n-1)
}
现在,我的问题是为什么当我的输入为 4 时上述函数会返回 12。它应该返回 14,因为 c(4)=14。
任何人都可以帮助我吗?