Your function is not
T(n) = T(n-1) + T(n-2) + T(n-3) + 1
it
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.
To check, run your original function with the following "y"
g(0) = 1 g(1) = 3 g(2) = 5 g(3) = 9 (ie = g(0) + g(1) + g(2) = 9, not g(1) + g(2) + g(3) + 1 = 10)
Use dynamic programming to avoid recalculating the already calculated T (n) s
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; }
source share