The problem is here
return reverse(str1[1:] + str1[0])
You combine the rest of the string with the first character and move on to the function reverse. Thus, the length of the string never decreases.
It should be
return reverse(str1[1:]) + str1[0]
, reverse. , .