There are much simpler (and safer) ways to have recursion. Just make two aliases call each other:
alias one if $1 < 5 { echo 3 -s Start: $1- | two $calc($1 + 1) | echo 3 -s End: $1- }
alias two if $1 < 5 { echo 4 -s Start: $1- | one $calc($1 + 1) | echo 4 -s End: $1- }
Then type:

//one 1

You can call /two either at the beginning or at the end of the code for the /one alias, depending on what you want to do.

If you want to have a general-purpose do_recurse you can also do this:
alias do_recurse $1-

The methods using aliases are safer than signals, except in the current version of mIRC. The safeguards that were implemented quite a few versions ago seem to be broken in v6.16, but I'm sure they will be fixed, since they used to work fine. Signals, on the other hand, were never recursion-safe: you can crash any version of mirc with something like:
on *:signal:crash: .signal -n crash
by typing
//signal crash

/.timerQ 1 0 echo /.timerQ 1 0 $timer(Q).com