カタラン数のコードを書きたかったのです。カタラン数は次のように定義されています。
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を返すのはなぜですか。c(4)= 14であるため、14を返す必要があります。
誰か助けてもらえますか?