To see this, consider a trace of (factorial-product 1 5):
> (factorial-product 1 5)
|(factorial-product 1 5)
|(factorial-product 5 4)
|(factorial-product 20 3)
|(factorial-product 60 2)
|(factorial-product 120 1)
|(factorial-product 120 0)
|120
120
Partial products are progressively
computed without waiting for subproblems to
be solved.