if you think a little, you realize that (a+b)! is a!*(a+1)*...*(a+b). So I would use the iter_factorial, but change the function to take two parameters,a and b, then in the loop check if i>a. If not, ret*=(i*i), else ret*=i. Or you can do a loop to a, and a loop from a+1 to b
This doesn't seem to be too different from getting factorial of just a. For example, if a is 3 and b is 2, you'd be calculating the factorial of their sum, or 6? and then multiplying it by the factorial of just a?
If you have a function that will calculate a factorial, I'd call the function twice, once for a, then for a+b, then multiply the results, keeping in mind that factorials can get very large pretty quickly.