I know your assignment requires a recursive procedure, then you should not consider this as an answer. But I'd like to show a possible concise solution, using a metapredicate:
loop_n(P, N) :- forall(between(1, N, _), P).
rectangle(R, C) :- loop_n((loop_n(write(*), C), nl), R).
Not every Prolog support calling a variable. In my old Prolog interpreter, for instance, I'd write loop_n(P, N) :- forall(between(1, N, _), call(P)).