Haskell, 21 bytes
n%a=product[n,n-a..1] Combining the built-in product function with stepped range enumeration beats what I could code up recursively (even with flawr saving a byte).
2322 bytes
n%a|n<1=1 n%a=n*(n%a|n<1=1|m<-n-a)%aa=n*m%a Here's a solution taking input in string format like 9!!, which I think is more interesting.
42 bytes
(\[(n,a)]->product[n,n-length a..1]).reads