あなたの機能はそうではありません
T(n) = T(n-1) + T(n-2) + T(n-3) + 1
です
if n > 2
T(n) = T(n-1) + T(n-2) + T(n-3)
or
T(n) = 1, 3, 5 for n = 0, 1, 2 respectively.
確認するには、次の「y」を使用して元の関数を実行します
g(0) = 1
g(1) = 3
g(2) = 5
g(3) = 9 (i.e. = g(0) + g(1) + g(2) = 9, not g(1) + g(2) + g(3) + 1 = 10)
動的計画法を使用して、すでに計算されたT(n)の再計算を回避します
int g(int y)
{
if(y <= 0)
return 1;
if(y == 1)
return 3;
if(y == 2)
return 5;
int a1 = 1; int a2 = 3; int a3 = 5;
int ret = 1;
for(int i = 2; i < y; ++i)
{
ret = a1 + a2 + a3;
a1 = a2;
a2 = a3;
a3 = ret;
}
return ret;
}