Without trying to solve the specific problem, here is some guidance on using recursion.
First, make sure to use the := symbol, which is SetDelayed. This will make your expressions act like a function that you can substitute values into.
Second, recursion requires that you identify the first (or possibly multiple) solution(s) and define them using the = symbol, which is Set. Using Set ensures that the value won't change unless reset. So for instance, you'll need to set
g[0, n_, k_] = g0[n,k];
g[1, n_, k_] = g1[n,k];
Now you are ready to define g[a_, n_, k_]. Since your recursive problem involves addition, you'll start with the previous solution, g[a-1, n, k], and add the incremental argument, gIncrement. gIncrement is the argument inside the summation. Here each solution is defined using := and saved using =; so that higher values of "a" can recall previous answers.
g[a_, n_, k_] := g[a, n, k] = g[a-1, n, k] + gIncrement[a-1, n, k];
Here's what the output will be:
g[#, n, k] & /@ {0, 1, 2, 3, 4} // TableForm
g0[n, k]
g1[n, k]
g1[n, k] + gIncrement[1, n, k]
g1[n, k] + gIncrement[1, n, k] + gIncrement[2, n, k]
g1[n, k] + gIncrement[1, n, k] + gIncrement[2, n, k] +
gIncrement[3, n, k]
Presto, you've got an efficient recursive function.