Your test code looks broken: you're only calling two functions in the recurse1() case.
Even after you fix it, it still won't use as much memory as the recursive case. That's the nature of recursion; every time you make another function call, Perl has to save another stack frame. When you return, Perl pops that frame off the stack. (This is a bit over simplified, but think of it like setting aside a task in memory for a moment to do another task. When the second task is done, you return to the first.)
I wouldn't classify this as a memory leak, because it appears that Perl is doing exactly as it should do.